在Android捕获媒体按钮> = 4.0(适用于2.3)(Capture media but

2019-06-24 07:58发布

我写它采用广播接收器捕捉到的多媒体按键一个(从耳机“播放按钮”)的一些服务,它完美的作品在Android 2.3.x版本(HTC的Nexus One或HTC Desire的)

当我试图在Android 4.0.3(三星Nexus S)运行它不起作用(我的应用程序不会收到意图“android.intent.action.MEDIA_BUTTON”和“播放”按钮的行为像往常一样:停止/启动音乐)。

清单的内容:

 ... <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".buttonreceiver.MediaButtonIntentReceiver" > <intent-filter android:priority="10000" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver> ... 

有没有办法让它在Android 4.0.3工作


编辑:我尝试提出的解决方案,我已经添加了动作和运行它,但我的接收器仍然没有收到意图。 什么是代码更奇怪的登记接收器也不起作用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.about_and_activation_view);

    Log.d("MR", "onCreate - " + getIntent().getAction());

    mReceiver = new MediaButtonIntentReceiver();
    registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_MEDIA_BUTTON));
}

现在,我完全糊涂了。

Answer 1:

请确保您有您的应用程序的活动,并且用户尝试按下该按钮之前运行了此次活动。 在此之前,你的<receiver> 将不会收到任何广播 。


UPDATE

在Android 4.0及更高版本,看来你还需要调用registerMediaButtonEventReceiver()AudioManager ,以便接收的事件。 这种状态会保持到别的调用registerMediaButtonEventReceiver()或直到调用unregisterMediaButtonEventReceiver()

例如,像这样的活性:

public class MediaButtonActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(
                                                                                                       this,
                                                                                                       MediaButtonReceiver.class));
  }
}

将使清单注册MediaButtonReceiver得到ACTION_MEDIA_BUTTON事件。



Answer 2:

如果你只是想你的应用程序是默认值,但不需要你可以用下面的方法按下按钮做任何事情。

此添加到清单文件(在“应用程序”节点):

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

在主要活动一下添加到的onCreate()或任何你想要运行应用程序时调用。 可能在的onResume()事件太有用了:

    mAudioManager =  (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder = new ComponentName(getActivity().getPackageName(), BroadcastReceiver.class.getCanonicalName());

    mAudioManager.registerMediaButtonEventReceiver(mRemoteControlResponder);


文章来源: Capture media button on Android >=4.0 (works on 2.3)