2016-11-13 2 views
1

Я пишу программу, которая ловит нажатие кнопки для наушников, а затем выполняет разные действия в зависимости от того, сколько времени и сколько раз вы нажимаете на нее. Переход на уровень api 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, если highjacking кнопка даже хорошая идея. Можете отметить своих пользователей, которые используют его для музыки. – Carcigenicate

+0

Thx для ответа. Трюк может заключаться в том, что вам нужно перехватить его. Но как вы обнаружили, что он был украден? Пользователи могут установить, что кнопка делает, чтобы они установили ее для воспроизведения музыки, а затем она будет воспроизводить музыку. Его вроде как эта программа, но хотят сделать гораздо больше вариантов. https://play.google.com/store/apps/details?id=com.kober.headset&hl=ru – user2773829

+0

Есть ли способ получить измененный список слушателей? Можно просто манипулировать этим напрямую. – Carcigenicate

ответ

0

Для того, чтобы слушать медиа ключевых событий объявить вещательный приемник в вашем файле манифеста, как так

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

In The 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

Смежные вопросы