2017-06-12 52 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

你可以確認,註冊和聲明是否相同或不同? –