2016-03-22 9 views
1

私のプロジェクトはほぼ終了しました。それが今私が求めていることです。Android Lでヘッドセットボタンを押さえる方法は?

上記のAndroid L &のヘッドセット/メディアボタンの押し方を教えてもらえますか?私は、それが廃止予定であり、MediaSessionの使用方法に関する多くのドキュメンテーション/例を見ていないことを認識したときに、AM.registerReceiverを使用しようとしています(私のminSDKがAPI16であるため、compat1を使用しようとしています。違いは?)。ここで私は現在、(何ももたらされる)やってんだよ:

void initReceivers() throws IllegalArgumentException { 
     final int RC = 1001; 

     if (!MainActivity.noisyRegistered) { 
      app.registerReceiver(noisyReceiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)); 
      MainActivity.noisyRegistered = true; 

      Intent intent = new Intent(app, AudioReceiver.class); 
      PendingIntent pending = PendingIntent.getBroadcast(app, RC, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      ComponentName name = new ComponentName(app.getPackageName(), AudioReceiver.class.getName()); 
      MediaSessionCompat mediaSession = new MediaSessionCompat(app, "sggTag", name, pending); 
      mediaSession.setMediaButtonReceiver(pending); 
     } 
    } 

static public class AudioReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (!intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) 
      return; 
     KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
     if (event == null || binder == null || player == null) 
      return; 

     switch (event.getKeyCode()) { 
      case KeyEvent.KEYCODE_MEDIA_PLAY: 
       binder.resume(); 
       break; 
      case KeyEvent.KEYCODE_MEDIA_PAUSE: 
       binder.resume(); 
       break; 
      case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: 
       if (player.isPlaying()) 
        binder.pause(); 
       else 
        binder.resume(); 
       break; 
      case KeyEvent.KEYCODE_MEDIA_NEXT: 
       binder.next(); 
       break; 
      case KeyEvent.KEYCODE_MEDIA_PREVIOUS: 
       binder.prev(); 
       break; 
     } 
    } 
} 

私のマニフェストは:

<receiver android:name=".ListenService$AudioReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.MEDIA_BUTTON"/> 
     </intent-filter> 
    </receiver> 

ありますときに私は、保留中の意図を提供する必要がありますなぜ私は実際には非常に混乱していますsetCallbackメソッド。

ありがとうございました。

答えて

-1

私は最近、メディアボタンに応答したアプリケーションを開発しました。私はサムスンギャラクシーS IIでそれをテストし、それは働いた。

まず、あなたのAndroidManifest.xmlで、エリア内、次を配置:

<receiver  android:name="net.work.box.controller.receivers.RemoteControlReceiver" > 
<intent-filter android:priority="1000000000000000" > 
    <action android:name="android.intent.action.MEDIA_BUTTON" /> 
</intent-filter> 

その後、別のファイルにBroadcastReceiverを作成します。

パブリッククラスRemoteControlReceiver BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 
    if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction()) { 
     KeyEvent event = (KeyEvent) intent .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 

     if (event == null) { 
      return; 
     } 

     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      context.sendBroadcast(new Intent(Intents.ACTION_PLAYER_PAUSE)); 
     } 
    } 
} 

}

これは、おそらく最善の解決策ではありません(特に上記のハードコードされたアンドロイド:優先度)。しかし、それは他のいくつかの技術を試してみましたが、どれもうまくいかなかったようです。だから私はこれに頼らざるを得ません。

+0

http://android-developers.blogspot.in/2010/06/allowing-applications-to-play-nicer.html 使用 –

+0

もリンク以下は、私のマニフェストに1000000000000000上のシンボルを解決できません。 –

+1

Android Studioはこの部分を見つけることができません:Intents.ACTION_PLAYER_PAUSE –

関連する問題