BluetoothDevice
MACアドレスしか知らないリモコンにpingを送信する方法を探しています。デバイスがまだAndroidスマートフォンの範囲内にあるかどうかを(少なくとも1秒に1回以上)知りたい。他のデバイスにアクセスできません(したがって、クライアントソフトウェアを作成できませんでした)。電話をルート化する必要がなく、標準のAPIを使用できれば素晴らしいと思います。しかし、他に可能性がなければ、私はそれを根絶することを想像することができます。
私はすでにこの質問を見つけましたが、それは私の問題を実際には解決しません。
私はすでにいくつかの方法を試しました:
- 定期的にDeviceDiscoveryを実行します
hcitool -i hci0 inq --flush
と組み合わせて使用するhcidump
- を使用して
l2ping
重要な行をスタックから抽出し、BlueZ
JNIを使用してコードにネイティブに実装しようとさえしました。
これらのアイデアに関する私の問題:
- 遅すぎる(各デバイスは9-13秒ごとに1回だけ検出されます)
- 遅すぎる(Linux PCでははるかに高速です。Androidフォンでは1と同じくらい遅いです。)
- 少し速いです
hcitool
が、ほとんどのデバイスではペアリングが必要です
私の次のアイデアは次のとおりです。
ServiceDiscovery
リモートデバイスへの安全でないソケットを作成し、一種のpingとして実行したいと思います。私が理解l2ping
している限り、ほぼ同じことを行います(API関数が使用できない名前解決の場合のみ)。しかし、私は実際に実行する方法を知りませんServiceDiscovery
。AndroidからBluetooth-API全体をほぼ読み、createInsecureRfcommSocketToServiceRecord(UUID myUUID)
さまざまなUUIDで試してみましたが、そこで何をしているのかよくわかりません。
だから私は2つの質問があります:
- プログラムでリモートを実行する方法は
ServiceDiscovery
?BluetoothDevices
- 他の方法/アイデア、Bluetoothデバイスに定期的にpingを実行する方法はありますか?
編集:
mMyDevice = mBluetoothAdapter.getRemoteDevice(MY_MAC);
mMyUUID = UUID.fromString("00001105-0000-1000-8000-00805F9B34FB");
try {
mBT_Socket = mMyDevice.createInsecureRfcommSocketToServiceRecord(mMyUUID);
mBluetoothAdapter.cancelDiscovery();
mBT_Socket.connect();
}catch(Exception e){}