如何在Android应用程序中检测蓝牙通话/媒体按钮按下

时间:2013-07-06 09:07:39

标签: android bluetooth broadcastreceiver android-broadcast

我需要在我的应用程序中检测蓝牙设备按钮。我遵循了许多stackoverflow链接,但似乎不适合我。

我正在使用广播接收器,如下所示:

public class RemoteControlReceiver extends BroadcastReceiver {    
    @Override    
    public void onReceive(Context context, Intent intent) {    
        if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {    
            KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);    
            if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {    
                //call my method    
            }    
        }    
    }    
}

我的清单如下:

<receiver android:name=".RemoteControlReceiver" >    
   <intent-filter>    
       <action android:name="android.intent.action.MEDIA_BUTTON" />    
       <category android:name="android.intent.category.DEFAULT"/>    
   </intent-filter>    
</receiver>

任何人都可以建议出路吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的API级别至少为11级吗?代码KEYCODE_MEDIA_PLAY在API级别11中添加.KEYCODE_MEDIA_PLAY_PAUSE代码自API级别3起存在。

另外,您是否尝试过配置意图过滤器而未指定类别?

您的RemoteControlReceiver类是否位于应用程序的根包中?它可能无法找到“.RemoteControlReceiver”。

除此之外,我看不出你在哪里做错了什么。

我在一些帖子中读过你可能还要调用registerMediaButtonEventReceiver和unregisterMediaButtonEventReceiver。你试过这个吗?

注册:

audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
componentName = new ComponentName(getPackageName(),
    RemoteControlReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(componentName);

取消注册:

audioManager.unregisterMediaButtonEventReceiver(componentName);