蓝牙断开连接原因代码=0x000e - Android

Bluetooth disconnect with reasoncode=0x000e - Android

我正在尝试创建一个连接/断开 BLE 设备的应用程序。我使用标准 android BT API 来创建应用程序。这是我连接 BLE 设备的代码

try {
        Log.d(TAG, "Going to connect");
        BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macaddress);
        if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
            Log.d(TAG, "Device is already bonded. try connecting it");
            if (bluetoothGatt != null) {
                Log.d(TAG, "bluetoothGatt is not null. Just connect it");
                bluetoothGatt.connect();
                return;
            }
            bluetoothGatt = device.connectGatt(getApplicationContext(), false, gattCallback);
            bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
        } else {
            Log.d(TAG, "Device is ? =====>  " + device.getBondState() + " Create bond");
            device.createBond();
        }
    }
    catch (Exception ex) {
        Log.e(TAG, ex.toString());
    }

**** 广播接收器 ****

private final BroadcastReceiver mPairingRequestRecevier = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Intent action is: " + intent.getAction());
        if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(intent.getAction())) {
            final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);


            try {
                byte[] pinbytes;
                pinbytes = ("" + 1234).getBytes("UTF-8");
                Log.d(TAG, "+_+_+_+_+_+_+_+_+Setting pin to : +_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_");
                device.setPin(pinbytes);
                abortBroadcast();
            } catch (Exception ex) {
                ex.printStackTrace();
            }

        } else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(intent.getAction())) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "BT Connected",Toast.LENGTH_SHORT).show();
                }
            });
            Log.d(TAG, "Device is connected");
        } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(intent.getAction())) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "BT DisConnected",Toast.LENGTH_SHORT).show();
                }
            });
            Log.d(TAG, "Device is Disconnected");
        } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction())) {
            int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
            switch (state) {
                case BluetoothDevice.BOND_NONE:
                    Log.d(TAG, "The remote device is not bonded.");
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "The remote device is not bonded",Toast.LENGTH_SHORT).show();
                        }
                    });
                    break;
                case BluetoothDevice.BOND_BONDING:
                    Log.d(TAG, "Bonding is in progress with the remote device.");
                    break;
                case BluetoothDevice.BOND_BONDED:
                    Log.d(TAG, "The remote device is bonded.");
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "The remote device is bonded.",Toast.LENGTH_SHORT).show();
                        }
                    });
                    BluetoothDevice device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macaddress);
                    bluetoothGatt = device.connectGatt(getApplicationContext(), false, gattCallback);
                    bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
                    Log.d(TAG, "Connection done: " + bluetoothGatt);
                    break;
                default:
                    Log.d(TAG, "Unknown remote device bonding state.");
                    break;
            }
        }
    }
};

当我尝试执行并连接设备时,它会连接然后立即断开连接,原因代码为 0x000e。这是 logcat 输出:

06-02 15:23:58.577 24490 24490 D MAULIK  : Going to connect
06-02 15:23:58.580  1656  1707 D BluetoothManagerService: Message: 20
06-02 15:23:58.580  1656  1707 D BluetoothManagerService: Added callback: android.bluetooth.IBluetoothManagerCallback$Stub$Proxy@d9976e7:true
06-02 15:23:58.595 24490 24490 D MAULIK  : Device is ? =====>  10 Create bond
06-02 15:23:58.595 24490 24490 I BluetoothDevice: createBond() for device 4C:55:CC:1C:8C:F6 called by pid: 24490 tid: 24490
06-02 15:23:58.597 23899 23917 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.599 23899 23928 I BluetoothBondStateMachine: Bond address is:4C:55:CC:1C:8C:F6
06-02 15:23:58.599 23899 23928 D bt_btif_config: btif_get_device_type: Device [4c:55:cc:1c:8c:f6] type 2
06-02 15:23:58.599 23899 23928 I bt_btif_dm: get_cod remote_cod = 0x00001f00
06-02 15:23:58.599 23899 23928 I BluetoothBondStateMachine: Entering PendingCommandState State
06-02 15:23:58.599 23899 23927 I bt_btif_dm: get_cod remote_cod = 0x00001f00
06-02 15:23:58.599 23899 23927 D bt_btif_config: btif_get_device_type: Device [4c:55:cc:1c:8c:f6] type 2
06-02 15:23:58.600 23899 23927 I bt_btif_dm: get_cod remote_cod = 0x00001f00
06-02 15:23:58.600 23899 23927 I BluetoothBondStateMachine: bondStateChangeCallback: Status: 0 Address: 4C:55:CC:1C:8C:F6 newState: 1
06-02 15:23:58.602 23899 23942 W bt_l2cap: l2cble_init_direct_conn
06-02 15:23:58.604 23899 23928 I BluetoothBondStateMachine: Bond State Change Intent:4C:55:CC:1C:8C:F6 OldState: 10 NewState: 11
06-02 15:23:58.607 24490 24490 D MAULIK  : Intent action is: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.607 24490 24490 D MAULIK  : Bonding is in progress with the remote device.
06-02 15:23:58.611 23935 23939 I WCNSS_FILTER: ibs_bt_device_wakeup: Writing IBS_WAKE_IND
06-02 15:23:58.621 23899 23942 E bt_btif : bte_scan_filt_param_cfg_evt, 23
06-02 15:23:58.625 23899 23899 V BluetoothFtpService: Ftp Service onStartCommand
06-02 15:23:58.625 23899 23899 V BluetoothFtpService: PARSE INTENT action: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.628 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.628 23899 23899 D BluetoothFtpService: device: DB9-8CF6
06-02 15:23:58.633 23899 23899 D BluetoothDunService: parseIntent: action: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.637 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.637 23899 23899 D BluetoothDunService: device: DB9-8CF6
06-02 15:23:58.646 23899 23942 I bt_btm_ble: btm_ble_resolve_random_addr_on_conn_cmpl unable to match and resolve random address
06-02 15:23:58.646 23899 23942 W bt_btm  : btm_acl_created hci_handle=5 link_role=0  transport=2
06-02 15:23:58.755 23899 23942 E bt_btm  : BTM_SetBlePhy failed, peer does not support request
06-02 15:23:58.760 23899 23927 D BtGatt.GattService: onConnected() connId=5, address=4C:55:CC:1C:8C:F6, connected=true
06-02 15:23:58.761 23899 23942 W bt_smp  : io_cap = 4
06-02 15:23:58.761 23899 23927 D BluetoothGattServer: onServerConnectionState() - status=0 serverIf=5 device=4C:55:CC:1C:8C:F6
06-02 15:23:58.762 23899 23942 W bt_smp  : rcvd auth_req: 0x2d, io_cap: 4                         loc_oob_flag: 0 loc_enc_size: 16,local_i_key: 0x0f, local_r_key: 0x0f
06-02 15:23:58.762 23899 23942 W bt_smp  : lmp_version_below LMP version 7 < 8
06-02 15:23:58.762 23899 23942 W bt_smp  : set auth_req: 0x2d, local_i_key: 0x07, local_r_key: 0x07
06-02 15:23:58.765 23899 23942 W bt_smp  : smp_br_connect_callback is called on unexpected transport 2
06-02 15:23:58.765 23899 23942 W bt_btm  : btm_read_remote_version_complete: BDA: 4c-55-cc-1c-8c-f6
06-02 15:23:58.765 23899 23942 W bt_btm  : btm_read_remote_version_complete lmp_version 7 manufacturer 15 lmp_subversion 8719
06-02 15:23:58.766 23899 23942 E bt_btif : bta_dm_acl_change new acl connetion:count = 1
06-02 15:23:58.766 23899 23942 W bt_btif : bta_dm_acl_change info: 0x0
06-02 15:23:58.766 23899 23942 W bt_l2cap: L2CA_SetDesireRole() new:x1, disallow_switch:0
06-02 15:23:58.769 23899 23927 D bt_btif_dm: remote version info [4c:55:cc:1c:8c:f6]: 0, 0, 0
06-02 15:23:58.773 23899 23927 E BluetoothRemoteDevices: state12newState0
06-02 15:23:58.773 23899 23927 D BluetoothRemoteDevices: aclStateChangeCallback: State:Connected to Device:4C:55:CC:1C:8C:F6
06-02 15:23:58.782 24490 24490 D MAULIK  : Intent action is: android.bluetooth.device.action.ACL_CONNECTED
06-02 15:23:58.794 24490 24490 D MAULIK  : Device is connected
06-02 15:23:58.892 23899 23942 W bt_l2cap: l2cble_process_conn_update_evt: Error status: 14
06-02 15:23:58.895 23899 23942 W bt_btif : bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x000e
06-02 15:23:58.896 23899 23942 W bt_btif : bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x000e
06-02 15:23:58.896 23899 23942 W bt_btif : bta_gattc_conn_cback() - cif=6 connected=0 conn_id=6 reason=0x000e
06-02 15:23:58.898 23899 23927 D BtGatt.GattService: onConnected() connId=5, address=4C:55:CC:1C:8C:F6, connected=false
06-02 15:23:58.898 23899 23927 D BluetoothGattServer: onServerConnectionState() - status=0 serverIf=5 device=4C:55:CC:1C:8C:F6
06-02 15:23:58.898 23899 23942 W bt_l2cap: L2CA_RemoveFixedChnl()  CID: 0x0006  BDA: 4c55cc1c8cf6 not connected
06-02 15:23:58.900 23899 23927 D bt_btif_config: btif_get_device_type: Device [4c:55:cc:1c:8c:f6] type 2
06-02 15:23:58.901 23899 23942 I bt_btm_sec: btm_sec_disconnected clearing pending flag handle:5 reason:14
06-02 15:23:58.906 23899 23942 W bt_l2cap: L2CA_SetDesireRole() new:x1, disallow_switch:0
06-02 15:23:58.906 23899 23942 E bt_btif : bta_gattc_mark_bg_conn unable to find the bg connection mask for: 4c:55:cc:1c:8c:f6
06-02 15:23:58.907 23899 23927 I bt_btif_dm: get_cod remote_cod = 0x00001f00
06-02 15:23:58.908 23899 23927 I BluetoothBondStateMachine: bondStateChangeCallback: Status: 9 Address: 4C:55:CC:1C:8C:F6 newState: 0
06-02 15:23:58.909 23899 23928 D BluetoothAdapterProperties: Failed to remove device: 4C:55:CC:1C:8C:F6
06-02 15:23:58.914 23899 23928 I BluetoothBondStateMachine: Bond State Change Intent:4C:55:CC:1C:8C:F6 OldState: 11 NewState: 10
06-02 15:23:58.914 23899 23927 E BluetoothRemoteDevices: state12newState1
06-02 15:23:58.914 23899 23927 D BluetoothRemoteDevices: aclStateChangeCallback: State:DisConnected to Device:4C:55:CC:1C:8C:F6
06-02 15:23:58.916 24490 24490 D MAULIK  : Intent action is: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.916 24490 24490 D MAULIK  : The remote device is not bonded.
06-02 15:23:58.930 23899 23899 D AvrcpBipRsp: onReceive: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.931 23899 23899 D BluetoothMapService: onReceive
06-02 15:23:58.931 23899 23899 D BluetoothMapService: onReceive: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.931 23899 23899 E BluetoothMapService: Unexpected error!
06-02 15:23:58.935 23899 23928 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.936 24490 24490 D MAULIK  : Intent action is: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.949 23899 23899 V BluetoothFtpService: Ftp Service onStartCommand
06-02 15:23:58.949 23899 23899 V BluetoothFtpService: PARSE INTENT action: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.952 24490 24490 D MAULIK  : Device is Disconnected
06-02 15:23:58.954 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.954 23899 23899 D BluetoothFtpService: device: DB9-8CF6
06-02 15:23:58.959 23899 23928 I BluetoothBondStateMachine: StableState(): Entering Off State
06-02 15:23:58.967 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.970 23899 23899 D BluetoothFtpService: BOND_STATE_CHANGED REFRESH trustDevices DB9-8CF6
06-02 15:23:58.975 23899 23899 D BluetoothDunService: parseIntent: action: android.bluetooth.device.action.BOND_STATE_CHANGED
06-02 15:23:58.983 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.984 23899 23899 D BluetoothDunService: device: DB9-8CF6
06-02 15:23:58.986 23899 23899 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:58.987 23899 23899 D BluetoothDunService: BOND_STATE_CHANGED REFRESH trustDevices DB9-8CF6
06-02 15:23:58.990 23899 23899 D BluetoothPbapReceiver: PbapReceiver onReceive action = android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.991 23899 23899 D BluetoothPbapReceiver: Calling start service with action = null
06-02 15:23:58.994 23899 23899 I BluetoothPbapReceiver: Exit - onReceive for intent:android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.994 23899 23899 D BluetoothPbapService: Enter - onStartCommand for service PBAP
06-02 15:23:58.994 23899 23899 D BluetoothPbapService: action: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:58.994 23899 23899 D BluetoothPbapService: Exit - onStartCommand for service PBAP
06-02 15:23:59.003 23899 23951 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:59.004 24046 24046 I BTLEASH : BTReceive action : android.bluetooth.device.action.ACL_DISCONNECTED :: Device : DB9-8CF6
06-02 15:23:59.006 23899 23961 D A2dpService: getA2DPService(): returning com.android.bluetooth.a2dp.A2dpService@9811aea
06-02 15:23:59.015 23899 23899 V BluetoothFtpService: Ftp Service onStartCommand
06-02 15:23:59.015 23899 23899 V BluetoothFtpService: PARSE INTENT action: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:59.026 23899 23899 D BluetoothDunService: parseIntent: action: android.bluetooth.device.action.ACL_DISCONNECTED
06-02 15:23:59.905 23935 23945 I WCNSS_FILTER: ibs_wcnss_bt_device_sleep: TX Awake, Sending SLEEP_IND

当我检查原因代码 0x000e 时,它​​说这是因为 BT_HCI_OP_PIN_CODE_NEG_REPLY。但我不知道为什么会出现原因代码?

提前致谢!

莫利克

我找到了上述问题的解决方案。

问题是我正在调用他 "createBond" 方法,因为我希望它配对。但是我有的设备没有配对它只是连接而不配对,所以我删除了配对代码并直接调用了 gatt.connect() 方法。

谢谢