0

BluetoothDeviceMACアドレスしか知らないリモコンにpingを送信する方法を探しています。デバイスがまだAndroidスマートフォンの範囲内にあるかどうかを(少なくとも1秒に1回以上)知りたい。他のデバイスにアクセスできません(したがって、クライアントソフトウェアを作成できませんでした)。電話をルート化する必要がなく、標準のAPIを使用できれば素晴らしいと思います。しかし、他に可能性がなければ、私はそれを根絶することを想像することができます。

私はすでにこの質問を見つけましたが、それは私の問題を実際には解決しません。

私はすでにいくつかの方法を試しました:

  1. 定期的にDeviceDiscoveryを実行します
  2. hcitool -i hci0 inq --flushと組み合わせて使用​​するhcidump
  3. を使用してl2ping

重要な行をスタックから抽出し、BlueZJNIを使​​用してコードにネイティブに実装しようとさえしました。

これらのアイデアに関する私の問題:

  1. 遅すぎる(各デバイスは9-13秒ごとに1回だけ検出されます)
  2. 遅すぎる(Linux PCでははるかに高速です。Androidフォンでは1と同じくらい遅いです。)
  3. 少し速いですhcitoolが、ほとんどのデバイスではペアリングが必要です

私の次のアイデアは次のとおりです。

ServiceDiscoveryリモートデバイスへの安全でないソケットを作成し、一種のpingとして実行したいと思います。私が理解l2pingしている限り、ほぼ同じことを行います(API関数が使用できない名前解決の場合のみ)。しかし、私は実際に実行する方法を知りませんServiceDiscovery。AndroidからBluetooth-API全体をほぼ読み、createInsecureRfcommSocketToServiceRecord(UUID myUUID)さまざまなUUIDで試してみましたが、そこで何をしているのかよくわかりません。

だから私は2つの質問があります:

  1. プログラムでリモートを実行する方法はServiceDiscoveryBluetoothDevices
  2. 他の方法/アイデア、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){}
4

1 に答える 1

0

近くのデバイスへの ping に関して共有したいアイデアの 1 つは、OBEX Push UUID を使用して近くのデバイスに Bluetooth 要求を送信することです。どれくらい時間がかかるかわかりませんが、試してみる価値はあります。この方法では、他のデバイスの OBEX サーバーへの RFComm Socket との接続を作成します。すべてのデバイスには、OBEX プッシュ要求を受信できるネイティブ OBEX サーバーが実行されていることに注意してください。OBEX Push UUID は「00001105-0000-1000-8000-00805F9B34FB」です。

この方法では、近くの Bluetooth デバイスが利用できない場合、クライアント側のデバイスは近くのデバイスに接続できず、1 ~ 2 秒以内に切断される可能性があります。

ここで注意できる 2 つの時間枠 1. 近くのデバイスが使用可能な場合、接続を確立するのにどのくらいの時間がかかりますか? 2. 接続できないかどうかを確認するのにどのくらいの時間がかかりますか。Bluetooth デバイスが利用できない場合は?

于 2013-02-18T10:07:06.923 に答える