2012-09-18 12 views
8

Próbuję użyć ACTION_VOICE_SEARCH_HANDS_FREE w Android 4.1.Jak korzystać z ACTION_VOICE_SEARCH_HANDS_FREE w Androidzie 4.1?

używam w ten sposób:

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

współpracuje z ACTION_RECOGNIZE_SPEECH ale z ACTION_VOICE_SEARCH_HANDS_FREE I ma to:

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

Jak mogę używać ACTION_VOICE_SEARCH_HANDS_FREE?

+0

@ Rai220: Oto co to jest RECORD_CODE? – Shiv

Odpowiedz

0

Musisz zainstalować na urządzeniu aplikację, która zawiera działanie, które odpowiada intencji ACTION_VOICE_SEARCH_HANDS_FREE. Pojawia się pytanie: które aplikacje obsługują to intencje? Jedyną odpowiedzią, jaką znam, jest trywialna "implementuj taką aplikację samodzielnie", więc jestem również zainteresowany tym pytaniem, ale nie jestem pewien, czy pasuje on do formatu Stackoverflow.

1

@Kaarel odpowiedział poprawnie, ale aby dostarczyć trochę więcej informacji:

Działalność musi zarejestrować następujące w manifeście:

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

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

Google Search jest zarejestrowany na tym zamiarem, ale będzie tylko reagować na to, gdy ekran jest włączony i nie zablokowany patrz poniżej pochodzą z 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(); 
      } 
     } 

Ta funkcja jest obecnie całkiem zbędny due to this linked bug, gdzie aplikacje systemowe zastępują priorytet, co uniemożliwia użytkownikowi wybór zainstalowanej alternatywy.

Który po utworzeniu takiej aplikacji i użytkownicy nie mogą z niej korzystać, jest naprawdę bardzo denerwujące ............. rzeczywiście.

Powiązane problemy