开发者

broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Android

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_BUTTO开发者_StackOverflow中文版N);
        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?


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜