Die MicrohonePopUp-Methode wird in MainActivity funktionieren, aber ich möchte, dass es von einer anderen Klasse (MediaButtonIntentReceiver) funktioniert. Das Problem ist mit startActivityForResult (intent, REQUEST_CODE); - aber ich weiß nicht, wie ich es lösen soll.android.app.ActivityThread.getApplicationThread() 'auf einem Nullobjekt Referenz
in der Klasse MainActivity
public void microphonePopUp(){
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice your answer");
startActivityForResult(intent, REQUEST_CODE);
}
in der Klasse MediaButtonIntentReceiver
public class MediaButtonIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (KeyEvent.KEYCODE_HEADSETHOOK == event.getKeyCode()) {
MainActivity test = new MainActivity();
test.microphonePopUp();
}
}
}
}
12-09 11: 20: 19.556 bis 19.556 14,803/com.timtennyson.priceaddition E/Android Runtime: FATALE AUSNAHME: Haupt Prozess: com.timtennyson.priceaddition, PID: 19556 java.lang.RuntimeException: nicht zu sta rt Empfänger com.timtennyson.priceaddition.MediaButtonIntentReceiver: java.lang.NullPointerException: Versuch 'android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getApplicationThread()' auf ein Null-Objekt Referenz virtuelle Methode aufzurufen bei android.app.ActivityThread.handleReceiver (ActivityThread.java:3641) bei android.app.ActivityThread.access $ 2000 (ActivityThread.java:221) um android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1876) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Loope r.loop (Looper.java:158) bei android.app.ActivityThread.main (ActivityThread.java:7224) bei java.lang.reflect.Method.invoke (native Methode) um com.android.internal. os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1230) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120) verursacht durch: java.lang.NullPointerException: Versuch virtuellen Methode aufzurufen 'android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getApplicationThread()' auf einem Nullobjekt Referenz bei android.app.Activity.startActivityForResult (Activity.java:4283) bei android.app.Activity.startActivityForResult (Activity.java:4230) bei android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:842) bei com.timtennyson.priceaddition.MainActivity.microphonePopUp (MainActivity.java:103) bei com.timtennyson.priceaddition.MediaButtonIntentReceiver.onReceive (MediaButtonIntentReceiver.java:27) bei android.app.ActivityThread.handleReceiver (ActivityThread.java:3634) bei android.app.ActivityThread.access $ 2000 (ActivityThread.java:221) bei android.app.A ctivityThread $ H.handleMessage (ActivityThread.java:1876) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:158) bei android.app. ActivityThread.main (ActivityThread.java:7224) bei java.lang.reflect.Method.aufrufen (native Methode)
Wenn MediaButtonIntentReveiver kein Verfahren in MainActivity verwenden kann, gibt es eine Möglichkeit, eine Fahne von MediaButtonIntentReceiver zu MainActivity für MainActivity setzen die Methode MicrophonePopUp zu benutzen? – timmyt123
@ timmyt123: Wenn es Ihr Ziel ist, auf 'ACTION_MEDIA_BUTTON'-Broadcasts zu hören, während 'MainActivity' sichtbar ist, können Sie gerne einen Event-Bus (z. B.' LocalBroadcastManager') verwenden, damit der Empfänger der Aktivität mitteilt, etwas zu tun. Sie müssten jedoch 'registerReceiver()'/'unregisterReceiver()' verwenden. Wenn Ihr Ziel es ist, zu anderen Zeiten ACTION_MEDIA_BUTTON-Sendungen zu hören, gibt es möglicherweise keine MainActivity-Instanz, mit der Sie arbeiten können. – CommonsWare
Ich habe eine Taste, um den MikrofonPopUp zu verwenden, aber ich möchte auch, dass die Media-Taste auch das MikrofonPopUp auslösen kann. Ja, ich habe einen Empfänger in OnResume() registrieren und Empfänger in OnPause() aufheben. – timmyt123