2012-09-18 4 views
8

Ich versuche ACTION_VOICE_SEARCH_HANDS_FREE in Android 4.1 zu verwenden.Wie kann ich ACTION_VOICE_SEARCH_HANDS_FREE in Android 4.1 verwenden?

Ich benutze diese Art und Weise:

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

Es arbeitet mit ACTION_RECOGNIZE_SPEECH in Ordnung, aber mit ACTION_VOICE_SEARCH_HANDS_FREE I hat dies:

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

Wie ich ACTION_VOICE_SEARCH_HANDS_FREE verwenden kann?

+0

@ Rai220: Was ist RECORD_CODE? – Shiv

Antwort

0

Sie müssen auf Ihrem Gerät eine App installieren, die eine Aktivität enthält, die auf die ACTION_VOICE_SEARCH_HANDS_FREE Absicht reagiert. Die Frage wird also: Welche Apps unterstützen diese Absicht? Die einzige Antwort, die ich kenne, ist die triviale, "Implementiere so eine App selbst", also bin ich auch an dieser Frage interessiert, aber ich bin mir nicht sicher, ob sie zum Stackoverflow-Format passt.

1

@Kaarel richtig beantwortet, aber ein wenig mehr Informationen zu liefern:

Eine Aktivität des folgend im Manifest registrieren muss:

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

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

Google-Suche für diese Absicht registriert ist, aber es wird nur darauf reagieren, wenn der Bildschirm gesperrt ist und nicht: unten von AudioService genommen Siehe

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(); 
      } 
     } 

Diese Funktion ist ziemlich überflüssig derzeit due to this linked bug, wobei Systemanwendungen die Priorität überschreiben, sodass der Benutzer keine installierte Alternative auswählen kann.

Welche, wenn Sie eine solche Anwendung erstellt haben und die Benutzer nicht verwenden können, ist wirklich sehr nervig ............. in der Tat.

Verwandte Themen