web-dev-qa-db-ja.com

Android BLE GATT_ERROR(133)デバイスへの接続時

MACアドレスを使用してBLEデバイスに接続しようとしています。

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(rememberedDeviceAddress)
bluetoothDevice.connectGatt(context, false, bluetoothGattCallback);

BLEデバイスの電源がオフの場合でも、BluetoothGattCallback.onConnectionStateChangestatus = 133newState = 2を使用してコールバックを受け取ります。

newState = 2はBluetoothProfile.STATE_CONNECTEDを参照します。これは、デバイスに接続されており、ステータス= 133がGATT_ERROR(ステータス= 0成功ではなく)であることを意味します。

コールバックの登録に失敗しましたエラーが発生しません。

デバイス:One Plus One(Android 4.4)

この問題を引き起こしている可能性のあるものについてのポインタがあれば役立ちます。

注:問題はすべてのデバイスで発生するわけではありません。 Nexus5ではすべてが正常に機能しているようですAndroid 5.0

スタックトレースの下を見つけてください:

03-06 13:00:11.994: D/BluetoothGatt(26771): registerApp()
03-06 13:00:11.994: D/BluetoothGatt(26771): registerApp() - UUID='uuid comes here'
03-06 13:00:12.004: D/BluetoothGatt(26771): onClientRegistered() - status=0 clientIf=5
03-06 13:00:42.004: D/BluetoothGatt(26771): onClientConnectionState() - status=133 clientIf=5 device='device id comes here'
13
dnivra

特定のデバイスでは、UIスレッドでBluetoothLEインタラクションを実行する必要があります。したがって、次のようなものを試すことをお勧めします。

// Create handler for main thread where mContext is application context
mHandler = new Handler(mContext.getMainLooper());
...
// Connect to BLE device from mHandler
mHandler.post(new Runnable() {
@Override
public void run() {
    mBTGatt = mBTDevice.connectGatt(mContext, false, mGattCallback);
}
});

もちろん、Activity.runOnUiThreadを使用することもできます。ソース: https://stackoverflow.com/a/23478737

2
Emeritus