broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Android

大兔子大兔子 提交于 2019-12-22 17:38:28

问题


I've found a lot of pages about this in the web, but none of them helped me. I've been for hours stucked in this problem. That's why i decided to make my own question.

What I want to do is an application that receives an intent of the type ACTION_MEDIA_BUTTON and the method onReceive() of the Broadcastreceiver does something.

My Activity is like this:

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

And my broadcastreceiver as follow:

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

The problem is that it doesn't work, no matter what I do. I've tried registering it dynamically with registerReceiver as in the code above. Also I've tried statically in the AndroidManifest.xml like this:

<receiver android:name=".MediaButtonIntentReceiver" android:enabled="true">
    <intent-filter android:priority="10000000">
        <action android:name="android.intent.action.ACTION_MEDIA_BUTTON" />
    </intent-filter>
</receiver>

And as you can see I've set the priority to a high level and even though it doesn't work. I've been on this for the whole day and I don't know what to do. The method onReceive from the broadcastreceiver isn't called anytime.

Does anyone know what should I do?


回答1:


First, you should stop using Toast as your diagnostic test. Use the Log class to log to LogCat, or breakpoints, or something.

Next, you should get rid of your MediaButtonIntentReceiver constructor, as it is not needed.

Then, I would dump the if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction)) block, since it is also not needed.

Next, I would make sure that your media button actually works. Does it control other applications, like a music player? It may be that your media button is not Android-compliant or something.




回答2:


Use android.intent.action.MEDIA_BUTTON Instead in your manifest. Check : http://developer.android.com/training/managing-audio/volume-playback.html



来源:https://stackoverflow.com/questions/6603170/broadcastreceiver-onreceive-problem-action-media-button-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!