Android上的捕获媒体按钮> = 4.0(适用于2.3)

时间:2012-05-10 15:19:40

标签: android broadcastreceiver android-manifest android-4.0-ice-cream-sandwich

我写了一些服务,使用BroadcastReceiver捕获媒体按钮之一(来自耳机的“播放按钮”),它在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));
}

现在我完全糊涂了。

2 个答案:

答案 0 :(得分:13)

确保您的应用中有活动,并且用户在尝试按下该按钮之前运行此活动。在那之前,您的<receiver> will not receive any broadcasts


<强>更新

在Android 4.0及更高版本中,您似乎还需要拨打registerMediaButtonEventReceiver() on 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事件。

答案 1 :(得分: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);