You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用中Dialogflow实现语音关键词唤醒替代按钮触发startListening()

Got it, let’s figure out how to add that hands-free wake-up feature to your Dialogflow Android app! Ditching the button and triggering startListening() with a custom keyword like "Hey Dialogflow" is totally achievable—here’s a step-by-step breakdown to make it happen:

1. Pick Your Keyword Detection Approach

First, you’ve got two main options depending on whether you need offline functionality or prefer cloud-powered accuracy:

  • Offline Option (PocketSphinx): Perfect if you want wake-up to work without internet. It’s lightweight and lets you train custom keywords easily.
  • Cloud-Based Option (ML Kit): Great for more accurate detection of natural phrases, though it requires an internet connection.
2. Implement Offline Wake-Up with PocketSphinx

This is a solid choice for offline use cases. Here’s how to set it up:

Step 1: Add Dependencies

Add the PocketSphinx library to your app-level build.gradle:

implementation 'edu.cmu.pocketsphinx:pocketsphinx-android:5.0.0'

Step 2: Initialize the Recognizer & Listen for Your Keyword

You’ll need to generate a keyword model (use PocketSphinx’s tools to create a .dic or .lm file for your phrase, like "Hey Dialogflow"). Then set up the recognizer in your Activity/Fragment:

private void setupPocketSphinxWakeUp() {
    try {
        Assets assets = new Assets(this);
        File assetDir = assets.syncAssets();
        SpeechRecognizer recognizer = SpeechRecognizerSetup.defaultSetup()
                .setAcousticModel(new File(assetDir, "en-us-ptm"))
                .setDictionary(new File(assetDir, "cmudict-en-us.dict"))
                .getRecognizer();

        // Add your custom wake-up keyword (match the phrase in your model)
        recognizer.addKeyphraseSearch("WAKE_TRIGGER", "HEY DIALOGFLOW");

        recognizer.addListener(new RecognitionListener() {
            @Override
            public void onResult(Hypothesis hypothesis) {
                if (hypothesis != null) {
                    String detectedPhrase = hypothesis.getHypstr();
                    if (detectedPhrase.equalsIgnoreCase("HEY DIALOGFLOW")) {
                        // Trigger Dialogflow's listening
                        aiService.startListening();
                    }
                }
            }

            // Fill in other required listener methods with empty bodies (they're mandatory)
            @Override public void onBeginningOfSpeech() {}
            @Override public void onEndOfSpeech() {}
            @Override public void onError(Exception error) {}
            @Override public void onTimeout() {}
            @Override public void onPartialResult(Hypothesis hypothesis) {}
        });

        // Start continuous listening for the keyword
        recognizer.startListening("WAKE_TRIGGER");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Step 3: Handle Permissions & Background Listening

  • Make sure you request the RECORD_AUDIO permission at runtime (required for Android 6.0+).
  • If you want wake-up to work when the app is in the background, run the recognizer in a Foreground Service (Android restricts background audio access for battery optimization).
3. Cloud-Powered Wake-Up with ML Kit

If you want better accuracy for natural phrases and don’t mind using cloud processing, ML Kit’s Keyword Recognition is a great option:

Step 1: Add Dependencies

Add ML Kit to your build.gradle:

implementation 'com.google.mlkit:keyword-recognition:16.0.0-beta6'

Step 2: Set Up Keyword Detection

You can use pre-trained keywords or upload your custom model to Firebase. Here’s a basic implementation:

private void setupMLKitWakeUp() {
    // Configure options with your keyword and confidence threshold (adjust as needed)
    KeywordRecognizerOptions options = new KeywordRecognizerOptions.Builder()
            .setKeyword("hey_dialogflow") // Use your keyword's model ID
            .setConfidenceThreshold(0.7f) // Higher = stricter, less false triggers
            .build();

    KeywordRecognizer recognizer = KeywordRecognition.getClient(options);

    // Set up continuous audio input from the microphone
    int sampleRate = 16000;
    AudioRecord audioRecord = new AudioRecord(
            MediaRecorder.AudioSource.MIC,
            sampleRate,
            AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT)
    );

    audioRecord.startRecording();

    // Process audio in a background thread
    new Thread(() -> {
        byte[] buffer = new byte[1024];
        while (!Thread.currentThread().isInterrupted()) {
            int bytesRead = audioRecord.read(buffer, 0, buffer.length);
            if (bytesRead > 0) {
                ByteBuffer audioData = ByteBuffer.wrap(buffer, 0, bytesRead);
                recognizer.process(audioData)
                        .addOnSuccessListener(result -> {
                            for (KeywordResult keyword : result.getKeywords()) {
                                if (keyword.getKeyword().equals("hey_dialogflow") && keyword.getConfidence() >= 0.7f) {
                                    aiService.startListening();
                                }
                            }
                        })
                        .addOnFailureListener(e -> {
                            // Handle errors (e.g., network issues)
                        });
            }
        }
    }).start();
}

Step 3: Additional Setup

  • Enable the ML Kit API in your Google Cloud Console.
  • Remember, cloud recognition needs internet, so handle cases where connectivity is lost.
4. Key Tips for Success
  • Battery Optimization: Continuous audio listening drains battery. Pause listening when the app is inactive, or use Android’s AudioManager to detect when the device is in use.
  • Accuracy Tuning: Test your keyword in different environments (noisy rooms, quiet spaces) and adjust confidence thresholds to reduce false triggers.
  • Foreground Service: For background wake-up, you’ll need a foreground service with a notification (Android requires this to prevent the system from killing your audio listener).

内容的提问来源于stack exchange,提问作者Bonteq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:05