每次都找不到蓝牙低功耗服务

时间:2017-09-28 06:00:52

标签: android bluetooth-lowenergy

早上好,所有在一起, 我正在开发一个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了很多,我认为它与谷歌的样本非常相似,但我不知道为什么它有时会显示,有时它不会。

也许有人可以帮助我

1 个答案:

答案 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次希望它现在可以工作) 但如果你知道一个更好的解决方案可以自由回答我