2017-12-01 12 views
2

カスタムBluetoothコンポーネントに接続するアプリケーションを開発しています。私たち皆が知っているように、AndroidのBluetoothは悪夢です。LG G5でのみBluetoothボンディングが失敗する

接続、ペアリングおよびボンディングは、全てのSamsungデバイス(S5、S6、S7、S8)に適していますが、問題は、特定のデバイスであるアンドロイド6

を実行LGのG5に失敗します。 それは、状態BOND_BONDING結合を結合するために行くと、私は、このログエントリを参照してください。

****** ACTION_BOND_STATE_CHANGED - BOND STATE 11 

をしかし、それはBOND_BONDEDに行くことはありません。代わりに私はしばらくしてからBOND_NONEを取得します。

****** ACTION_BOND_STATE_CHANGED - BOND STATE 10 

特定のバージョンの問題であるため、コード全体を共有する価値はないと思うので、コードは正しいです。私はこれを回避するための提案やアイデアを探しています。参考のために BOND_NONEは10 BOND_BONDINGは11 BOND_BONDEDある

// Handles various events fired by the BluetoothService. 
    private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 
      switch (action) { 
       case BluetoothService.ACTION_DATA_AVAILABLE://Received data from the device 
        // Doing stuff 
        break; 
       case BluetoothService.ACTION_GATT_SERVICES_DISCOVERED: 
        // Doing more stuff 
        break; 

       case BluetoothDevice.ACTION_ACL_CONNECTED: 
        // Doing amazing stuff 
        break; 
       case BluetoothDevice.ACTION_BOND_STATE_CHANGED: 
        Integer bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, 0); 
        Log.d("MainActivity", "****** ACTION_BOND_STATE_CHANGED - BOND STATE " + bondState.toString()); 

        break; 
      } 
     } 
    }; 

をあるおかげで12

https://stuff.mit.edu/afs/sipb/project/android/docs/reference/android/bluetooth/BluetoothDevice.html

です! 1として、それが唯一のユーザーがプログラム我々はsetpasskeyという名前のプライベートメソッドを使用してパスキーを設定することができpasskey .Butを入力することができ表しBluetoothDevice.EXTRA_PAIRING_VARIANT場合

+0

まず思いが、これは祖父母が行うことができなくなり、ユーザインタラクションのBluetoothペアリングされています。それから私は見下ろして、ユーザーだけがパスキーを入力することができますええ答えです。あなたはその対話的なペアリングをコード化する必要があります。また、 "LG G5でのみ"このように考えることはありません。 Phone.tostring()!= "LG G5"は、他のメーカーの電話機では失敗するでしょう。 – danny117

答えて

3

BluetoothDevice.EXTRA_PAIRING_VARIANT

をチェックしてください。

コードの下に使用してください:

if(type == 1) { 
    int pin = Integer.parseInt(devicePin); 
    try { 
     device.getClass().getMethod("setPasskey", int.class) 
       .invoke(device, pin); 
     abortBroadcast(); 
    } catch (IllegalAccessException e) { 

    } catch (InvocationTargetException e) { 

    } catch (NoSuchMethodException e) { 

    } 
} 
関連する問題