2016-11-13 2 views
1

나는 헤드폰 버튼을 누른 다음 얼마나 많은 시간을 누르는가에 따라 다른 일을하는 프로그램을 작성 중이다. API 레벨 21로 이동합니다. Android 5.0. 그래서 버튼 누르기를 잡을 수는 있지만 mp3 플레이어를 시작하면 버튼 누르기가 시작됩니다. 어떻게 방지 할 수 있습니까? 둘째 질문 일시 중지 된 mp3 및 그 프로그램을 다시 시작합니까? 내 프로그램이 mp3를 재생하지 않습니다. 미디어 키 이벤트를 수신하기 위해헤드폰 버튼 컨트롤 안드로이드 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=ko – 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()); 그리고 해당 버전은 5.0 이하에서만 작동합니다. 4.4에서도 MediaSessionCompat를 사용하고 있는지 잘 모르겠습니다. – user2773829