2016-11-13 6 views
1

私は、ヘッドフォンボタンを押してから、何回押したかによって何か違うことをするプログラムを書いています。 APIレベル21に行く。Android 5.0。 ボタンを押すことはできますが、mp3プレーヤーを起動するとボタンが押され始めます。どうすればそれを防ぐことができますか? 2番目の質問は、一時停止した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。トリックは、あなたがそれをrehookする必要があるかもしれません。しかし、どうやってそれが盗まれたのを発見しますか?ユーザーはボタンが何をするかを設定して、音楽を再生するように設定し、その後音楽を再生することができます。それはちょっとこのプログラムのようですが、はるかに多くのオプションを作りたいと思っています。 https://play.google.com/store/apps/details?id=com.kober.headset&hl=en – user2773829

+0

リスナーの変更可能なリストを取得する方法はありますか?単にそれを直接操作することができます。 – Carcigenicate

答えて

0

RemoteControlReceiverクラスではそう

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

ようなあなたのマニフェストファイルでブロードキャストレシーバを宣言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未満でのみ動作します。あなたがMediaSessionCompatを使用して4.4で動作しているかどうか不明です。 – user2773829

関連する問題