Нужно мое приложение для подключения с моим устройством BLE - PullRequest
0 голосов
/ 22 марта 2019

Я работаю с CC2640 и моим пользовательским приложением. У меня есть проблема, которую я не мог решить в течение нескольких дней. На практике я не рискую подключать устройство BLE к приложению при использовании сопряженного устройства. На практике, при первом подключении после ввода пароля он сообщает, что он подключен, но не работает, а затем второе подключение больше не читает журналы «ПОДКЛЮЧЕНО». Кто-нибудь может мне помочь? Это то, что я написал

MainActivity

@Override
                        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {  ///here??
                            super.onConnectionStateChange(gatt, status, newState);

                            String intentAction;
                            BluetoothAdapter bleAdapter = ((BluetoothManager) getSystemService(BLUETOOTH_SERVICE)).getAdapter();
                            Set<BluetoothDevice> paired = bleAdapter.getBondedDevices();
                            for (BluetoothDevice device : paired) {
                                if (device.getName().equals("RCQ4-BLE")) {
                                    Log.i("Paired", "It paired" + bleAdapter.getBondedDevices());
                                    if (newState == BluetoothProfile.STATE_CONNECTED) {
                                        intentAction = ACTION_GATT_CONNECTED;
                                        Log.i("gattCallBack", "STATE CONNECTED");
                                        broadcastUpdate(intentAction);
                                        Log.i(TAG, "Connected to GATT server");
                                        Log.i(TAG, "Attempting to start service discovery:" + gatt.discoverServices());
                                    } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                                        intentAction = ACTION_GATT_DISCONNECTED;
                                        Log.i("gattCallBack", "STATE DISCONNECTED");
                                        broadcastUpdate(intentAction);
                                    } else if (mBluetoothGatt != null) {
                                        mBluetoothGatt.disconnect();
                                        mBluetoothGatt = null;
                                    } else {
                                        Log.w(TAG, "onConnectionStateChange() status = " + status + "newState = " + newState);
                                    }
                                }
                            }
                        }

Selected Device

private final BroadcastReceiver mBroadcastReceiver4 = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
        int prevstate = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);

        String msg = "Bond state change: state" + pairstate(state) + "previous state" + pairstate(prevstate);
        Log.w("Bond state receiver", msg);
    }

    private String pairstate(int state) {
            switch (state) {
                case BluetoothDevice.BOND_BONDING: Log.i("Bond status:", "Bonding..");

                    //device.createBond();
                    // onBondingRequired();
                    break;
                case BluetoothDevice.BOND_BONDED:
                    Log.i("Bond status:", "Bonded");
                    //  onBonded();
                    break;
                case BluetoothDevice.BOND_NONE:
                    Log.i("Bond status:", "Fail");
                    // onBondingFailed();
                default:
                    return String.valueOf(state);

            }
            return(null);
       }
};

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
            switch(action)
            {
        case MainActivity.ACTION_GATT_CONNECTED:
            // updateConnectionState(R.string.connected);
            invalidateOptionsMenu();
            break;
        case MainActivity.ACTION_GATT_DISCONNECTED:
            // updateConnectionState(R.string.disconnected);
            invalidateOptionsMenu();
            clearUI();
            break;
        case MainActivity.ACTION_GATT_SERVICES_DISCOVERED:
            initializeGattServiceUIElements(mMainActivity.getSupportedGattServices());
            break;
...