いくつかの調査の後、私はこれしか言えません:
Motorola は Broadcom の側に立ち、独自の API を開発しました。既存のプロファイルのみをサポートしていると述べているため、非常に制限されているようです。ここでチェックしてください。
Samsung は、BLE API に関する情報を提供していません。この APIが存在し、 samsung.bluetoothle と呼ばれることを確認できます。SGSIII の BLE 機能を使用する Google Play のアプリを実際に逆コンパイルしたところ、Android のネイティブ BT API には存在しないいくつかのメソッドが見つかりました。それらの名前は、BLE 関連であることを明確に示しています。私はJavaリフレクションを介してそれらを使用しようとしましたが、現在ライブラリを開発する可能性を考えています。しかし、私がこれまでに実行したテストでは、せいぜい不安定な結果しか得られませんでした。Samsung の開発者フォーラムにもスレッドがあります。興味がある場合は、ここで圧力をかけることをお勧めします。
この点に関して、Google はほとんどコメントしていません。Galaxy Nexus にはこの問題に関するスレッドがあり、多くの人が文句を言っています。Google からの回答に最も近いものは、ここで見つけることができます。
[アップデート]
Samsung はまた、Android のいくつかのクラスを変更しました。具体的には、次のとおりです。
BluetoothAdapter
BluetoothDevice
[アップデート]
GoogleとSamsungの両方からのサポートが不足しているため、この問題をしばらく脇に置いていたので、これまでに学んだことを投稿します。
BluetoothAdapter
新しい方法:
public boolean android.bluetooth.BluetoothAdapter.leTestEnd()
public boolean android.bluetooth.BluetoothAdapter.setAvStreaming(boolean)
public boolean android.bluetooth.BluetoothAdapter.setScanLE(boolean)
public void android.bluetooth.BluetoothAdapter.setScoPathChange(int)
public boolean android.bluetooth.BluetoothAdapter.startLeDiscovery()
それらを使用するには、次の手順を実行します。
BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);
注: この方法は特に通常のstartDiscovery()
方法と同じように機能しますが、少なくとも私にとっては、5 回中 2 回は BLE デバイスを検出します。これはSGSIII専用です。新しいメソッドを抽出するまでには至っていませんが、抽出しBluetoothDevice
たらここに投稿します。