0

Android アプリで BTLE デバイスをスキャンするには、ACCESS_COARSE_LOCATIONまたはACCESS_FINE_LOCATION. しかし、アプリはペアリングするために BTLE デバイスをスキャンする必要があります?

これは、睡眠モニターとペアになって次のように正当化するアプリで特に見られます

Android 6.0 Marshmallow の時点で、Android では、Bluetooth Low Energy スキャンを実行するアプリは、最初にデバイスの位置情報サービスにアクセスするための許可を要求し、取得する必要があります。

そのため、Sense はセットアップ中に位置情報サービスへのアクセス許可を求めます。Sense のペアリングを完了するには、位置情報サービスへのアクセスを許可する必要があります。

これは本当に必要ですか?ユーザーの位置情報を必要とせずにペアリングするにはどうすればよいでしょうか? OS の Bluetooth ダイアログを介して、アプリとは別にデバイスとペアリングすることができました。

Bluetooth 位置情報を検出する理由

4

1 に答える 1

1

技術的には、BLE デバイスが既にモバイル デバイスとペアリングされている場合、アプリはスキャンする必要さえありません。代わりに、この関数を呼び出して、BLE でフィルタリングできるデバイスのリストを取得できます: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#getBondedDevices()

Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : devices) {
   if (device.getType() != BluetoothDevice.DEVICE_TYPE_LE) {
     continue;
   }
   //Do things to BLE device
}

しかし、それでは UUID でフィルタリングすることはできません。つまり、デバイスが何であるかをアドレスまたは名前に基づいて判断する必要があり、どちらも信頼できません。

于 2016-12-10T13:57:36.957 に答える