CONNECTION_STATE_CHANGED和STATE_CHANGED之间的区别

时间:2014-05-02 19:39:23

标签: android bluetooth

Android蓝牙接收器中的动作CONNECTION_STATE_CHANGED和STATE_CHANGED有什么区别?

            else if (BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED .equals(action)) {
            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
                    BluetoothAdapter.STATE_DISCONNECTED);
                if (state == BluetoothAdapter.STATE_CONNECTED) {
                    //nothing
                } else {

                }
        } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
            if (state == BluetoothAdapter.STATE_OFF) {

            }
        }

1 个答案:

答案 0 :(得分:7)

根据docs,差异如下:

ACTION_CONNECTION_STATE_CHANGED

Intent用于将本地蓝牙适配器的连接状态更改广播到远程设备的配置文件。

ACTION_STATE_CHANGED

本地蓝牙适配器的状态已更改。例如,蓝牙已打开或关闭。

换句话说,一个Intent用于更改连接状态,另一个用于更改蓝牙适配器本身的状态。

修改

要检测设备是否移入和移出范围,您需要使用以下意图:

对于这两者,您需要正常的BLUETOOTH权限和BLUETOOTH_ADMIN权限:

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

BroadcastReceiver的意图过滤器看起来像这样:

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

Here是关于BluetoothDevice的一般文档。