Bluetoothビーコンを使用してAndroid携帯端末と通信するためのアプリケーションを作成しています。私は1つのビーコン(クライアントとして機能する)と1つのアンドロイドモバイルデバイス(サーバとして機能し、接続をリスンする)の間でこれを成功裏に達成しました。以下のコードスニペットを見つけるMACアドレスなしのcreateInsecureRfcommSocketToServiceRecordを使用したAndroidのBluetooth接続
クライアントアプリ
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(MACaddress);
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("f3c74f47-1d38-49ed-8bbc-0369b3eb277c"));
mBluetoothAdapter.cancelDiscovery();
socket.connect();
サーバーアプリ
mmServerSocket = mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("NAME", UUID.fromString("f3c74f47-1d38-49ed-8bbc-0369b3eb277c"));
socket = mmServerSocket.accept();
は、これは私がそのを取得することができる午前1つのモバイルデバイス(サーバー)で正常に動作してくださいMACaddress
の近くのBluetoothデバイスをスキャンしてください。しかし、レンジスキャニングに存在する約20〜25台のモバイルデバイスが非常に多くの時間を消費するケースを考えてください。私はスキャンを実行せずにこれをしたいと思います。
サーバーのMACaddress
を使用せずにこれを達成する方法はありますか?ユニークなUUIDだけで接続を確立できますか?私は、デバイスをペアリングしたくないことに注意してください。
この点に関する他の解決方法も歓迎されます。ありがとう!
おかげでデビッド! BLEでスキャンフィルタを試してみましょう。しかし、一時的な回避策として、コードを使ってサーバのMACアドレスを偽装/偽装する方法はありますか?このようにして、事前にMACを知っているのでスキャンを避けることができます。私は、デバイスのルーティングやさまざまなサードパーティのアプリケーションを通じてMACスプーフィングのいくつかの方法を見つけましたが、Javaコードはありませんでした。 – deadpool
私の経験は同じです。 MACをスプーフィングするには、rootとの低レベルのアクセスが必要です。 – davidgyoung
私はUUIDを使用してスキャンフィルタを作成しましたが、1つのサーバで結果を得るのに3〜4秒かかります。それはもう一つの疑問を生みました - フィルターはスキャンを遅くしますか?スキャナーフラグメントは一致するUUIDをチェックする必要があるためです。私は1秒間に1台のデバイスをスキャンできることを望んでいました。それは可能でしょうか? @davidgyoung – deadpool