8

我正在尝试ACTION_VOICE_SEARCH_HANDS_FREEAndroid 4.1中使用。

我用这种方式:

Intent intent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
intent.putExtra(RecognizerIntent.EXTRA_SECURE, true);
startActivityForResult(intent, RECORD_CODE);

它适用于ACTION_RECOGNIZE_SPEECHACTION_VOICE_SEARCH_HANDS_FREE我有这个:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.action.VOICE_SEARCH_HANDS_FREE (has extras) }

我该如何使用ACTION_VOICE_SEARCH_HANDS_FREE

4

2 回答 2

2

@Kaarel 回答正确,但要提供更多信息:

一个活动需要在清单中注册以下内容:

    <intent-filter >
        <action android:name="android.speech.action.VOICE_SEARCH_HANDS_FREE" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

谷歌搜索已注册此意图,但它只会在屏幕打开且未锁定时对其做出反应:见下文取自AudioService

private void startVoiceBasedInteractions(boolean needWakeLock) {
        Intent voiceIntent = null;
        // select which type of search to launch:
        // - screen on and device unlocked: action is ACTION_WEB_SEARCH
        // - device locked or screen off: action is ACTION_VOICE_SEARCH_HANDS_FREE
        //    with EXTRA_SECURE set to true if the device is securely locked
        PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
        boolean isLocked = mKeyguardManager != null && mKeyguardManager.isKeyguardLocked();
        if (!isLocked && pm.isScreenOn()) {
            voiceIntent = new Intent(android.speech.RecognizerIntent.ACTION_WEB_SEARCH);
        } else {
            voiceIntent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
            voiceIntent.putExtra(RecognizerIntent.EXTRA_SECURE,
                    isLocked && mKeyguardManager.isKeyguardSecure());
        }
        // start the search activity
        if (needWakeLock) {
            mMediaEventWakeLock.acquire();
        }
        try {
            if (voiceIntent != null) {
                voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                mContext.startActivity(voiceIntent);
            }
        } catch (ActivityNotFoundException e) {
            Log.w(TAG, "No activity for search: " + e);
        } finally {
            if (needWakeLock) {
                mMediaEventWakeLock.release();
            }
        }

由于此链接错误,此功能目前非常多余,系统应用程序会覆盖优先级,从而阻止用户选择已安装的替代方案。

当您创建了这样一个应用程序并且用户无法使用它时,真的很烦人............确实。

于 2013-08-19T18:54:29.187 回答
0

您需要在您的设备上安装一个包含响应ACTION_VOICE_SEARCH_HANDS_FREE意图的活动的应用程序。所以问题就变成了:哪些应用程序支持这种意图?我知道的唯一答案是微不足道的,“自己实现这样的应用程序”,所以我也对这个问题感兴趣,但我不确定它是否符合 Stackoverflow 格式。

于 2012-09-20T00:28:07.737 回答