我在网上发现了很多关于此的网页,但没有一个帮助过我。我几个小时都陷入了这个问题。这就是为什么我决定提出自己的问题。
我想要做的是接收类型为ACTION_MEDIA_BUTTON的意图的应用程序,以及Broadcastreceiver的onReceive()方法做的事情。
我的活动是这样的:
public class MusicControlActivity extends Activity {
private MediaButtonIntentReceiver receiver = new MediaButtonIntentReceiver();
@Override
public void onCreate(Bundle p_SavedInstanceState) {
super.onCreate(p_SavedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
filter.setPriority(1000);
registerReceiver(receiver,filter);
}
@Override
public void onDestroy()
{
unregisterReceiver(receiver);
}
我的广播接收者如下:
public class MediaButtonIntentReceiver extends BroadcastReceiver {
public MediaButtonIntentReceiver()
{
super();
}
@Override
public void onReceive(Context context, Intent intent)
{
String v_IntentAction = intent.getAction();
if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction)) {
return;
}
KeyEvent v_Event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (v_Event == null) {
return;
}
int v_Action = v_Event.getAction();
if (v_Action == KeyEvent.ACTION_DOWN) {
// do something
Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show();
}
abortBroadcast();
}
}
问题在于,无论我做什么,它都不起作用。我已经尝试使用registerReceiver动态注册它,如上面的代码所示。另外我在AndroidManifest.xml中静态尝试过这样:
<receiver android:name=".MediaButtonIntentReceiver" android:enabled="true">
<intent-filter android:priority="10000000">
<action android:name="android.intent.action.ACTION_MEDIA_BUTTON" />
</intent-filter>
</receiver>
正如您所看到的,我已将优先级设置为高级别,即使它不起作用。 我一整天都在这,我不知道该怎么办。来自广播接收者的onReceive方法不会随时调用。
有谁知道我该怎么做?
答案 0 :(得分:2)
使用android.intent.action.MEDIA_BUTTON代替您的清单。检查:http://developer.android.com/training/managing-audio/volume-playback.html
答案 1 :(得分:0)
首先,您应该停止使用Toast
作为诊断测试。使用Log
类登录到LogCat或断点或其他内容。
接下来,你应该摆脱你的MediaButtonIntentReceiver
构造函数,因为它不需要。
然后,我会转储if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction))
块,因为它也不需要。
接下来,我会确保您的媒体按钮确实有效。它是否控制其他应用程序,如音乐播放器?可能是您的媒体按钮不符合Android标准。