Skip to content

部分安卓设备无法弹出PIN码 #5

@TongCong12138

Description

@TongCong12138

您好,我正在使用您的库,用于连接我们的中控设备。我在发现服务后,设置通知。触发设置通知代码后,基本上安卓手机就会弹出PIN码输入框,但是目前我们公司的测试机的里面,有一部华为mate9和一部OPPO手机无法弹出PIN码。下面是我的代码,请问是什么原因导致的?需要设置什么参数吗?我脱离APP在手机的设置,蓝牙列表里面去点击连接,可以正常弹出PIN码输入框。万分感激

        private fun vehicleConnect(device: Device) {
        // 连接配置
        val config = ConnectionConfiguration()
        config.setConnectTimeoutMillis(20000)
        config.setRequestTimeoutMillis(2000)
        config.setTryReconnectMaxTimes(3)
        config.setAutoReconnect(true)
        // 观察者监听连接状态
        vehicleDevice = device
        vehicleConnection = EasyBLE.getInstance().connect(device, config, object : EventObserver {
            @Tag("onConnectionStateChanged")
            @Observe
            @RunOn(ThreadMode.MAIN)
            @Override
            override fun onConnectionStateChanged(device: Device) {
                super.onConnectionStateChanged(device)
                Log.d("EasyBLE", "当前线程:${Thread.currentThread().name}")
                when (device.connectionState) {
                    ConnectionState.DISCONNECTED -> {
                        Log.d("EasyBLE", "已断开连接")
                        runOnUiThread {
                            // 如果是车辆
                            methodChannel?.invokeMethod("vehicleBlueConnectStateChange", "disconnected")
                            clearVehicleGatt()
                        }
                    }
                    ConnectionState.CONNECTING -> {
                        Log.d("EasyBLE", "正在连接")

                    }
                    ConnectionState.SCANNING_FOR_RECONNECTION -> {
                        Log.d("EasyBLE", "正在搜索重连")

                    }

                    ConnectionState.CONNECTED -> {
                        Log.d("EasyBLE", "已连接,还未执行发现服务")

                    }
                    ConnectionState.SERVICE_DISCOVERING -> {
                        Log.d("EasyBLE", "已连接,正在发现服务")

                    }
                    ConnectionState.SERVICE_DISCOVERED -> {
                        Log.d("EasyBLE", "已连接,成功发现服务")
                        // 车子获取PIN码,如果有绑定记录,直接成功
                       if (isAuto) {
                           runOnUiThread(Runnable {
                               methodChannel?.invokeMethod("vehicleBlueConnectStateChange", "connected")
                           })
                       } else {
                           // 发送PIN码获取
                           runOnUiThread(Runnable {
                               methodChannel?.invokeMethod("handlerLoadPin", null)
                           })
                       }

                        // 设置通知
                        setVehicleNotification()
                    }

                    ConnectionState.RELEASED -> {
                        Log.d("EasyBLE", "连接已释放")
                    }
                    else -> {

                    }
                }
            }


    /**
     * 车控设置通知
     */
    private fun setVehicleNotification() {
        vehicleConnection?.let {
            val serverUUID = UUID.fromString("18424398-7CBC-11E9-8F9E-2A86E4085A59")
            val writeUUID = UUID.fromString("772AE377-B3D2-4F8E-4042-5481D1E0098C")
            setNotification(it, serverUUID, writeUUID, object : NotificationChangeCallback {
                override fun onRequestFailed(request: Request, failType: Int, gattStatus: Int, value: Any?) {
                    Log.e("EasyBLE", "开启通知失败")
                }
                override fun onNotificationChanged(request: Request, isEnabled: Boolean) {
                    Log.e("EasyBLE", "通知开启")
                }
            })
        }
    }
    
    private fun setNotification(connection: Connection?, serverUUID: UUID, notificationUUID: UUID,callBack:NotificationChangeCallback) {
        Log.d("EasyBLE", "设置开启通知")
        connection?.let {
            val builder = RequestBuilderFactory().getSetNotificationBuilder(
                serverUUID,
                notificationUUID,
                true
            )
            builder.setCallback(callBack)
            builder.build().execute(it)
        }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions