私は最新のAndroidスマートフォン、つまりHTC One Vを使用してBluetooth 4.0(別名Bluetooth Smart)デバイスを操作する方法を見つけようとしています。
私が理解したように、APIの制限により、Bluetooth 4.0ハードウェアでAndroid 4.0)でもGATTプロファイルを使用するといくつかの問題があります。
MotorolaがBT LE用の独自のAPIをリリースしたのを見ましたが、他のベンダーでも機能するかどうかはわかりません。私の目標は、適切なハードウェアを備えたすべてのスマートフォンのユニバーサルサポートを得ることです。
解決策の提案は高く評価されています。
アレクセイ
PS:はい、私はAndroid API for HDPを見ましたが、「クラシック」なBluetoothデバイスでのみ使用されているようです(BT LEのように低エネルギーのデバイスでは使用されていません)。
発見されたように、4.3はBLEをサポートしていますが、特にNexusデバイスではBLEは非常に壊れています。私の意見では、それは生産の準備ができていません。
残念ながら、AndroidネイティブGATT APIはありません。Androidは現在Bluetooth Low Energyをまったくサポートしていないためです。これは今後のAndroidリリースですが、今日のメーカーは代わりに、サードパーティのBluetoothスタックを、Qualcomm、Broadcom、CSRなどのベンダーからのLow Energyサポートと統合しています。これらには独自のAPIセットが付属しており、特定のベンダーのスタックを使用する電話のセットへの互換性が明らかに制限されています。良いニュースは、iOSやWindows 8などの他のプラットフォームにはネイティブGATT BLE APIがあり、それらは十分にサポートされているということです。Androidの場合、GoogleがLinux/BlueZの作業を統合することを決定するまで待つ必要がありますAndroidでのBLE。
いくつかの調査の後、私はこれを言うことができます:
MotorolaはBroadcomと協力して独自のAPIを開発しています。既存のプロファイルのみがサポートされていると記載されているため、非常に制限されているように思われます。それをチェックしてください ここ 。
SamsungはBLE APIに関する情報を提供できません。存在を確認でき、samsung.bluetoothleと呼ばれます。私は実際にSGSIIIのBLE機能を使用するいくつかのアプリをGoogle Playから逆コンパイルし、AndroidのネイティブBT APIに存在しないいくつかのメソッドを見つけました。それらの名前は、BLE関連であることを明確に示しています。私はJavaリフレクションを通じてそれらを使用してみましたが、現在ライブラリを開発する可能性を模索しています。しかし、これまでに実行したテストは、せいぜい不安定な結果をもたらしました。スレッドもあります。サムスンの開発者フォーラムで、興味があれば圧力をかけることをお勧めします here .
グーグルはこの点についてほとんど発言していません。 Galaxy Nexusにはこの問題に関する thread があり、多くの人が不満を表明しているため、スターを付ける必要があります。 Googleからの回答に最も近いものは here です。
[UPDATE]
Samsungは、さらに具体的には、いくつかのAndroidのクラスも変更しています。
BluetoothAdapter
BluetoothDevice
[UPDATE]
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()
メソッドと多少似ていますが、少なくとも私にとっては、BLEデバイスを5回のうち2回検出します。そしてremember、これは[〜#〜] sgsiii [〜#〜]の場合のみです。私はBluetoothDevice
で新しいメソッドを抽出することに慣れていませんが、そうしたら、ここに投稿します。
SDK 18は現在サポートしています。ドキュメントはこちらです:
http://developer.Android.com/guide/topics/connectivity/bluetooth-le.html
Nexus 4でテストすると、Bluetoothスタックがクラッシュします。
HTCは昨年からHTC One X +、Droid DNA、そしてもちろんHTC OneでBLEサポートを提供しています。当初、HTC BLE APIはリクエストに応じていましたが、現在は http://htcdev.com から自由にダウンロードできます。
はい、新しい標準Android GoogleのBLE API Android APIレベル18が間もなく登場します(IOビデオ)-ただし、すべてのAPIはGATTプロファイルのサポート(IOSに類似)で非常に類似しているため、互換性のある方法でサードパーティAPI(HTC、Samsungなど)をラップして、新しい標準APIをサポートできます。
Andoridで利用可能なBluetoothGatt api
https://developer.Android.com/reference/Android/bluetooth/BluetoothGatt.html