繁体   English   中英

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

[英]Capture media button on Android >=4.0 (works on 2.3)

我写了一些服务,它使用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)); } 

现在我完全糊涂了。

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


UPDATE

在Android 4.0及更高版本中,您似乎还需要AudioManager调用registerMediaButtonEventReceiver()才能接收事件。 该状态将持续,直到其他调用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事件。

如果您只想让您的应用成为默认应用,但不需要按下按钮,则可以使用以下方法。

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

    <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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM