Ich entwickle und App, die Daten aus dem Internet streamen, habe ich Android MediaPlayer und AudioManager und alles funktioniert gut. Ich bin in ACTION_MEDIA_BUTTON steckengeblieben, um den Player über die Kopfhörer-Taste abzuspielen/anzuhalten.Broadcast Receiver für ACTION_MEDIA_BUTTON nicht gefeuert
FYI, habe ich den ganzen Weg in stackover, setPriority zu 999 oder 1000 oder 10000 auch Zuhörer registrieren in android menifeast Datei usw. aber nicht dazu führen, vorgeschlagen verwendet.
BroadcarstReceiver Datei
public class HeadSetReceiver erweitert BroadcastReceiver {
onHeadsetEventListener mCallback;
public interface onHeadsetEventListener {
void onHeadsetRemoved();
void onHeadsetNextClicked();
void onHeadsetPreviousClicked();
void onHeadsetPlayPauseClicked();
}
@Override
public void onReceive(Context context, Intent intent) {
mCallback = (onHeadsetEventListener) context;
// Intent.ACTION_HEADSET_PLUG << Trigger as soon i plug and unplug the headphone..
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
switch (state) {
case 0:
mCallback.onHeadsetRemoved();
break;
case 1:
break;
}
}
// Intent.ACTION_MEDIA_BUTTON ---- Not triggered even after register listener
if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
KeyEvent event = (KeyEvent) intent
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
int keycode = event.getKeyCode();
int action = event.getAction();
Log.i("keycode", String.valueOf(keycode));
Log.i("action", String.valueOf(action));
//onKeyDown(keyCode, event)
if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keycode == KeyEvent.KEYCODE_HEADSETHOOK)
if (action == KeyEvent.ACTION_DOWN)
mCallback.onHeadsetPlayPauseClicked();
if (keycode == KeyEvent.KEYCODE_MEDIA_NEXT)
if (action == KeyEvent.ACTION_DOWN)
mCallback.onHeadsetNextClicked();
if (keycode == KeyEvent.KEYCODE_MEDIA_PREVIOUS)
if (action == KeyEvent.ACTION_DOWN)
mCallback.onHeadsetPreviousClicked();
}
}
}
* I Zuhörer in MediaPlayerService.java registriert haben - OnCreate() als folgen *
headSetReceiver = new HeadSetReceiver();
IntentFilter filter2 = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter2.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
registerReceiver(playerRadioService.headSetReceiver,filter2);
Und auch nicht registriert onDestroy als
unregisterReceiver(headSetReceiver);
folgen, aber ich bin mir nicht sicher, zu implementieren und damit auf das kein Ergebnis gibt, was ich fehle.
Logcat
--------- beginning of system
06-13 00:03:36.316 1192-1202/? D/BroadcastQueue: Add broadcastBroadcastRecord{30a21c3 u0 android.intent.action.MEDIA_BUTTON} into (background/order), now header = BroadcastRecord{30a21c3 u0 android.intent.action.MEDIA_BUTTON}, size = 1
06-13 00:03:36.318 1192-1202/? D/BroadcastQueue: Add broadcastBroadcastRecord{16bfa40 u0 android.intent.action.MEDIA_BUTTON} into (background/order), now header = BroadcastRecord{30a21c3 u0 android.intent.action.MEDIA_BUTTON}, size = 2
06-13 00:03:36.321 1192-1961/? V/BroadcastQueue: Finished with ordered broadcast BroadcastRecord{30a21c3 u0 android.intent.action.MEDIA_BUTTON}, [background], remain = 1
06-13 00:03:36.324 1192-2185/? V/BroadcastQueue: Finished with ordered broadcast BroadcastRecord{16bfa40 u0 android.intent.action.MEDIA_BUTTON}, [background], remain = 0
06-13 00:03:36.755 271-335/? D/phoneserver: rsrp[0]=97,rscp[0]=255,rxlev[0]=99 ind_str=
+CESQ: 99,99,255,255,22,97
Nach meinem Wissen, wenn Sie den Empfänger dynamisch registrieren, wie ich in onCreate() getan, keine Notwendigkeit, in Manifest-Datei zu deklarieren. –
Könnten Sie PLZ bestätigen, registrieren und erklären sind gleich oder anders? –