broadcastreceiver onReceive问题ACTION_MEDIA_BUTTON Android

时间:2011-07-06 21:22:12

标签: android android-intent broadcastreceiver

我在网上发现了很多关于此的网页,但没有一个帮助过我。我几个小时都陷入了这个问题。这就是为什么我决定提出自己的问题。

我想要做的是接收类型为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方法不会随时调用。

有谁知道我该怎么做?

2 个答案:

答案 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标准。