早上好,所有在一起, 我正在开发一个BLE应用程序,我为GATT连接写了一个活动。现在我遇到了一个问题,因为有时系统会识别服务和特征,有时则不会。
以下是我的一些代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gatt);
peripheralTextView = (TextView) findViewById(R.id.PeripheralTextView);
peripheralTextView.setMovementMethod(new ScrollingMovementMethod());
scanServiceButton = (Button) findViewById(R.id.scan_service);
scanServiceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mBluetoothGatt.discoverServices();
}
});
//get the Bluetooth device which comes from mainActivity
BluetoothDevice bluetoothDevice = getIntent().getExtras().getParcelable("selectedDevice");
String test = bluetoothDevice.getAddress();
Toast toast = Toast.makeText(this, "Verbunden mit " + test, Toast.LENGTH_LONG);
toast.show();
Log.d("GattActivity", "connectGatt()");
mBluetoothGatt = bluetoothDevice.connectGatt(this, false, mGattCallback);
}
这是我的onServiceDiscovered,有时我会获得所有值的服务,但很多时候它没有得到任何值:
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
//new Services discovered
if(status == BluetoothGatt.GATT_SUCCESS){
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
displayGattServices(mBluetoothGatt.getServices());
}else{
Log.d("GattActivity", "onServicesDiscovered received: " + status);
}
}
我google了很多,我认为它与谷歌的样本非常相似,但我不知道为什么它有时会显示,有时它不会。
也许有人可以帮助我
答案 0 :(得分:0)
我有一个解决方案现在希望它是正确的。
我做的第一件事就是确保我们能够访问粗略位置。
if(this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){...}
第二,我忘了在onConnectionStateChange()
中使用discoverServices()@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {.... mBluetoothGatt.discoverServices()...;}
在我做了这两件事以后它每次都有效(测试了大约50次希望它现在可以工作) 但如果你知道一个更好的解决方案可以自由回答我