Я работаю с 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;