@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.
@ Rai220: Was ist RECORD_CODE? – Shiv