2016-11-13 118 views
1

我正在写一个程序,捕捉耳机按钮然后做不同的事情取决于多久,你有多少次按它。去api level 21. Android 5.0。 所以我可以赶上按钮按下,但是当启动一个MP3播放器,然后它开始捕捉按钮按下。我怎样才能防止呢? 第二个问题你如何恢复暂停的MP3,其和其他程序不是我的程序播放MP3。耳机按钮控制Android 5.0

audioSession = new MediaSession(getApplicationContext(), "TAG11"); 
    MsCallback=  new MediaSession.Callback() { 

     @Override 
     public boolean onMediaButtonEvent(final Intent mediaButtonIntent) { 
      String intentAction = mediaButtonIntent.getAction(); 
      Log.i("onMediaButtonEvent", intentAction); 
      if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
       KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 

       if (event != null) { 
        if(toast!=null){ 
         toast.cancel(); 
        } 
        toast = Toast.makeText(getApplicationContext(), "headsetbutton press", Toast.LENGTH_SHORT); 
        toast.show(); 
       } 
      } 
      return super.onMediaButtonEvent(mediaButtonIntent); 
     } 


    }; 
    audioSession.setCallback(MsCallback); 

    PlaybackState state = new PlaybackState.Builder() 
      .setActions(PlaybackState.ACTION_PLAY_PAUSE) 
      .setState(PlaybackState.STATE_PLAYING, 0, 0, 0) 
      .build(); 
    audioSession.setPlaybackState(state); 
    audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); 

    audioSession.setActive(true); 
+0

可能无法阻止其他程序将听众放在按钮上。你也许可以听新的听众,然后删除他们,但我不知道这是否可能。 Idk如果劫持按钮甚至是一个好主意。可能勾选将其用于音乐的用户。 – Carcigenicate

+0

Thx回答。诀窍可能是您需要重新绑定它。但你如何发现它被盗?用户可以设置按钮的功能,然后将其设置为播放音乐,然后播放音乐。它有点像这个程序,但想做更多的选择。 https://play.google.com/store/apps/details?id=com.kober.headset&hl=zh-CN – user2773829

+0

有没有办法获得可变列表的听众?可以直接操纵它。 – Carcigenicate

回答

0

为了听媒体的重要事件清单档案中的声明广播reciever像这样

<receiver android:name=".RemoteControlReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.MEDIA_BUTTON" /> 
     </intent-filter> 
    </receiver> 

RemoteControlReceiver类扩展BroadcastReceiver和提取关键事件,像这样

键码
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.d(TAG, "onReceive: "); 
    if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
     KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
     int keyCode = event.getKeyCode(); 

    } 
} 

每个耳机上的基本按钮通常是Pause/Play按钮

+0

您需要使用mAudioManager.registerMediaButtonEventReceiver( mRemoteControlResponder); – user2773829

+0

那么你应该包括你如何挂接RemoteControlResponder来获得意图。像这样'mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE); mRemoteControlResponder = new ComponentName(getPackageName(), RemoteControlReceiver.class.getName()); mAudioManager.registerMediaButtonEventReceiver( mRemoteControlResponder);'且它的唯一值低于5.0。甚至不确定它的工作在4.4那里你使用MediaSessionCompat。 – user2773829