作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目标是拦截来自耳机和蓝牙的广播,最终响应来自耳机的不同类型的点击以改变媒体播放器。此解决方案适用于 ICS 之前的所有版本。这是我尝试过的一些代码和东西:
....
private BroadcastReceiver mediaButtonReceiver = new MediaButtonIntentReceiver();
....
public void onCreate() {
...
IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
mediaFilter.setPriority(2147483647); // this is bad...I know
this.registerReceiver(mediaButtonReceiver, mediaFilter);
...
}
public class MediaButtonIntentReceiver extends BroadcastReceiver {
private KeyEvent event;
public MediaButtonIntentReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
return;
}
event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null) {
return;
}
try {
int action = event.getAction();
switch(action) {
case KeyEvent.ACTION_UP :
Log.d("TEST", "BUTTON UP");
break;
case KeyEvent.ACTION_DOWN :
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE :
Log.d("TEST", "BUTTON DOWN");
break;
}
} catch (Exception e) {
Log.d("TEST", "THIS IS NOT GOOD");
}
abortBroadcast();
}
}
为了使这项工作正常进行,听起来 4.0+ 需要这样的东西,但它不起作用:
((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(this, MediaButtonIntentReceiver.class));
除了上述之外,我什至尝试将它添加到 list 中:
<receiver android:name=".MediaButtonIntentReceiver" android:enabled="true">
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
仍然没有运气。我在这里错过了什么?这肯定是 4.0+/ICS/JellyBean 问题...这是在服务中完成的,而不是 Activity 。
最佳答案
看起来您的广播接收器是您服务的内部类?如果是这样,请将您的广播接收器设为静态,并在 list 中执行此操作:
<receiver android:name="MyOuterClass$MediaButtonIntentReceiver" android:enabled="true">
<intent-filter android:priority="2147483647" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在 Android 3.0+ 中,您必须使用 registerMediaButtonEventReceiver
来注册接收器。这将 AndroidManifest 用于 IntentFilter。它在 2.x 中工作的原因是因为您使用 this.registerReceiver()
注册它,它在没有 AndroidManifest 的情况下注册了接收器。
关于android - MediaButtonIntentReceiver 不适用于 Android 4.0+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13257982/
目标是拦截来自耳机和蓝牙的广播,最终响应来自耳机的不同类型的点击以改变媒体播放器。此解决方案适用于 ICS 之前的所有版本。这是我尝试过的一些代码和东西: .... private Broadcast
我是一名优秀的程序员,十分优秀!