【问题标题】:broadcastreceiver onReceive problem ACTION_MEDIA_BUTTON Androidbroadcastreceiver onReceive 问题 ACTION_MEDIA_BUTTON Android
【发布时间】:2011-07-06 21:22:12
【问题描述】:

我在网上找到了很多关于此的页面,但没有一个对我有帮助。我已经被这个问题困了几个小时了。这就是为什么我决定提出自己的问题。

我想做的是一个应用程序接收类型为 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 方法。

有人知道我该怎么办吗?

【问题讨论】:

  • 你试过android:priority="2147483647"吗?
  • 没有。我会尝试,我回帖!谢谢!

标签: android android-intent broadcastreceiver


【解决方案1】:

在您的清单中使用 android.intent.action.MEDIA_BUTTON 代替。检查:http://developer.android.com/training/managing-audio/volume-playback.html

【讨论】:

    【解决方案2】:

    首先,您应该停止使用Toast 作为您的诊断测试。使用 Log 类记录到 LogCat,或断点,或其他东西。

    接下来,您应该去掉 MediaButtonIntentReceiver 构造函数,因为它不是必需的。

    然后,我将转储 if (!Intent.ACTION_MEDIA_BUTTON.equals(v_IntentAction)) 块,因为它也不需要。

    接下来,我会确保您的媒体按钮确实有效。它是否控制其他应用程序,例如音乐播放器?可能是您的媒体按钮不符合 Android 标准。

    【讨论】:

    • 感谢您的回答。我会做出这个改变,看看会发生什么。无论如何,问题不在 MediaButtonIntentReceiver 类中,因为我已经使用 sendbroadcast() 强制执行意图,并且 onReceive 方法有效。所以我认为问题在于意图 ACTION_MEDIA_BUTTON。实际上我正在模拟器上测试它并按下它上面的声音按钮?它应该以这种方式工作吗?提前致谢!
    • @Guilherme Gusman:模拟器没有媒体按钮。
    • 顺便说一句,你最后提出的问题真的很重要。当我在听一些音乐时,媒体按钮只会提高或降低音量,它不会改变音乐或其他东西。我想做的是,制作一个程序来改变这种行为。但现在我认为这个按钮,音量按钮不是媒体按钮......这是问题吗?是的,这个音量按钮有什么意图吗?
    • @Guilherme Gusman:“但现在我认为这个按钮,音量按钮不是媒体按钮......这是问题吗?” - 正确的。 “是的,这个音量按钮有什么意图吗?” -- 没有。
    • 好的,非常感谢!哈哈所以我不能做我想做的事......我的手机不支持!我会检查你的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多