3

我正在编写一个应用程序来检测是否连接了蓝牙设备。在做了一些研究之后,我发现最好的方法是使用带有一些蓝牙相关意图过滤器的广播接收器。

<receiver android:name=".BTReceiver" >
            <intent-filter>
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED" />
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED" />
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED" />
            <action android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED" />             
            </intent-filter>  
        </receiver>

这是我的蓝牙接收器课程。

@Override
    public void onReceive(Context context, Intent intent) {     
        String action = intent.getAction();
        if(action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED") || action.equals("android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED") ){
            Log.d("Z","Received: Bluetooth Connected");
        }
        if(action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED") ||action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED_REQUESTED")){
            Log.d("Z","Received: Bluetooth Disconnected");
        }
        Log.d("Z",action);
}

当我打开蓝牙耳机并将其连接到手机时,我会收到两次“android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED”。当我断开蓝牙耳机时,广播接收器不运行或接收任何内容。所以我从来没有收到我的蓝牙断开日志消息。我正在使用两个蓝牙权限,我认为这是让它工作所必需的。

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

我真的可以使用任何关于这里有什么问题的信息。谢谢你。

4

1 回答 1

7

你的动作错了。

<receiver android:name=".BTReceiver" >
        <intent-filter>
        <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
        <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
        <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />           
        </intent-filter>  
    </receiver>

去除那个

|| action.equals("android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED")  

因为 CONNECTION_STATE_CHANGED 可以连接、断开等。所以你的第一个if总是正确的。您不需要注册 android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED,除非您对 a2dp 执行任何特定操作。

因此,应该是

if(action.equals("android.bluetooth.device.action.ACL_CONNECTED") {
        Log.d("Z","Received: Bluetooth Connected");
    }
    if(action.equals("android.bluetooth.device.action.ACL_DISCONNECTED") ||action.equals("android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED")){
        Log.d("Z","Received: Bluetooth Disconnected");
    }
于 2013-03-13T03:49:47.647 回答