特定のデバイスでBluetoothGattに接続すると、アプリケーションに問題が発生します。Android BluetoothDevice connectGattは、特定のデバイスでエラー133で常に失敗します。
すべてのBLE関連のコードは、Service
にあり、Huawei CAM-L03以外はすべて正常に動作します。古い三星ギャラクシーデバイスにも問題があると報告されています。
一部のデバイスでは、すべてのBLE通信をUIスレッドで実行する必要があることが最近発見されました。私は簡単なテストアプリケーションを書いて、Huaweiの問題はすべてがUIスレッド上で動くと消えてしまいます。
私が作成しようとした主なルーパーとService
でHandler
:
final Context context = getApplicationContext();
Handler handler = new Handler(context.getMainLooper());
handler.post(new Runnable(){
@Override
public void run() {
BluetoothGatt gatt = device.connectGatt(context, false, callBackHandler);
…
}
});
しかし、それはまだコンテキストがサービスであるため、私は一種の疑いの接続コールバック、中に私GATT_ERROR 133を与え、 UIアプリではありません。
私はここでは2つのオプションを参照してください。すべてのデバイスをサポートするために、特定のデバイスにUIアプリへ
- リスト項目を
私が持つコンテンツではありませんよこれらのいずれか。私が知らない他の選択肢はありますか?
代わりにrunOnUiThreadを使用してみてください。あなたはアクティビティのインスタンスが必要です – Zoe
それは事です、私はアクティビティにアクセスできません。 – unexplored
コールを実行しているスレッドに応じて、Bluetoothコールの動作を区別する方法はありません。 AndroidのBluetooth APIは、Androidの「バインダー」機能を使用してBluetoothサービスと通信します。エラーコード133は、成功しなかったという一般的なエラーコードです。 onConnectionChangeコールバックでエラーコード133が最も一般的な理由の1つは、接続試行がタイムアウトしたためです。 – Emil