2017-06-12 130 views
0

我正在开发和应用哪些流数据来自在线,我已经使用Android MediaPlayer和AudioManager和一切工作正常。我卡在ACTION_MEDIA_BUTTON中通过耳机按钮播放/暂停播放器。广播接收器为ACTION_MEDIA_BUTTON未解雇

仅供参考,我已经使用在stackover建议的一路,setPriority到 999或1000或10000也注册在android系统menifeast文件监听器等 而非结果。

BroadcarstReceiver文件

公共类HeadSetReceiver扩展广播接收器{

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

     } 
    } 
} 

*我在MediaPlayerService.java注册监听器 - 在OnCreate()作为 后续*

headSetReceiver = new HeadSetReceiver(); 

IntentFilter filter2 = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); 
filter2.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); 
registerReceiver(playerRadioService.headSetReceiver,filter2); 

同时也可作为跟踪

unregisterReceiver(headSetReceiver); 

,但我不知道未注册的onDestroy,我所缺少的实现,因此有没有这方面的结果。

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 

回答

0

你申报清单档案中的接收器?

+0

据我所知,如果你像在onCreate()中一样动态地注册接收者,不需要在清单文件中声明。 –

+0

你可以确认,注册和声明是否相同或不同? –