7

nexus 4 (android 4.3) で BLE モジュール (bluegiga BLE112) を使用しようとしています。接続、デバイスの名前の取得、GATT への接続はできますが、サービスの検出に失敗します。

最初のガット接続を行う方法は次のとおりです(正常に動作しているようです:

dev.connectGatt(getBaseContext(), true, btGattCB);

GATT コールバックは次のとおりです。

private BluetoothGattCallback btGattCB = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        super.onConnectionStateChange(gatt, status, newState);
        if(newState == BluetoothProfile.STATE_CONNECTED){
            Log.i(TAG, "Gatt Connected");
            gatt.discoverServices();
        }
        else if(newState == BluetoothProfile.STATE_DISCONNECTED){
            Log.i(TAG, "Gatt Disconnected");
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status){
        Log.i(TAG,"Status onServiceDiscovered: "+status);   //status code i'm getting here is 129
        List<BluetoothGattService> btServices = gatt.getServices();//try anyway
    }
};

そして、ここに私のログがあります:

09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Scan Callback
09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Device is: 00:07:80:67:2F:63
09-28 12:58:37.611    4118-4130/com.jnewt.btFive I/PDU? Device Name: BGT GPIO Test
09-28 12:58:43.607    4118-4118/com.jnewt.btFive I/PDU? Scan Timeout
09-28 12:59:13.539    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 12:59:43.561    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 12:59:43.581    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:00:00.920    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:00:30.902    4118-4130/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:00:30.922    4118-4190/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:01:20.265    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:01:50.277    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:01:50.297    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected
09-28 13:01:56.113    4118-4129/com.jnewt.btFive I/PDU? Gatt Connected
09-28 13:02:26.115    4118-4190/com.jnewt.btFive I/PDU? Service Discovery Failed
09-28 13:02:26.125    4118-4130/com.jnewt.btFive I/PDU? Gatt Disconnected

https://developer.android.com/reference/android/bluetooth/BluetoothGatt.htmlページから、可能なステータスとして 129 が言及されていません (129 に一致する定数はありません)。

この時点で、私はすべてのアイデアがありません。iphoneの同様の例でテストすることにより、問題をAndroidフォンに切り分けました。Playストアで入手できるアプリもいくつか試しましたが、同様の問題があります(接続、名前の取得などはできますが、サービスはありません)。

4

6 に答える 6

6

Nexus 7でアプリをテストしているときに、実際に今日同じエラーコードを受け取りました。私の問題は、2 X Gatt.connectを短時間で呼び出したことです。多分これはあなたを助けます。センサー デバイスに短時間で 2 回接続しないように注意してください。

于 2013-10-25T13:20:03.833 に答える
2

Nexus 7 で TI センサー タグを使用していくつかのテストを行いました。

  1. ネクサス 7 (アンドロイド 4.3) -->0x81 GATT_INTERNAL_ERROR
  2. Nexus 7 を Android 4.4.2 にアップグレード -->0x81 GATT_INTERNAL_ERROR
  3. WiFiをオフにして、onServicesDiscovered呼び出されたことはありません。
  4. Bluetoothをオフにしてオンにすると、機能します!!!
  5. WiFi をオンにしますが、onServicesDiscovered再び失敗しました。
  6. WiFiをオフにすると、再び機能します。

Galaxy S4 (Android 4.3) でも同じプログラムをテストしましたが、常に問題なく動作しています。

したがって、Nexus 7 の BLE スタックは良くないと思います。

WiFi なしで生活できる場合は問題ないかもしれませんが、別の Android 4.3 デバイスが見つかった場合は、別のデバイスを試す必要があります。

于 2013-12-25T23:10:42.947 に答える
1

BLE デバイスが既に電話とペアリングされている場合、このエラーが発生します。デバイスのペアリングを解除してサービスを再度検出すると、エラーは解決します。

于 2015-02-09T11:38:11.893 に答える