1. ホーム
  2. android

[解決済み] Android 6.0でBluetooth Low Energyスキャンを使用するには位置情報を有効にする必要があります。

2022-05-15 06:11:54

質問

Android バージョン 6.0 にアップグレードした後、Bluetooth Low Energy (BLE) スキャンは、デバイスで位置情報サービスが有効になっている場合のみ機能します。参考までにこちらをご覧ください。 Android 6.0 の Bluetooth Low Energy startScan でデバイスが検出されない

基本的には、アプリのパーミッションが有効で、かつ、電話のパーミッションもオンになっている必要があります。 これはバグですか? 位置情報サービスを実際に有効にせずにスキャンすることは可能でしょうか? すべてのアプリに位置情報を設定する必要があるのは嫌なのですが。

EDIT 私は言及しそびれていましたが、私が使っているのは startScan() メソッドを BluetoothLeScanner は、API 21 で提供されています。私は、このメソッドが必要とするマニフェストのコースと細かい位置情報のパーミッションについては問題ありません。ただ、私のアプリのユーザーが、私のアプリを使用するためにデバイスの位置情報サービス (GPSなど) を有効にする必要がないようにしたいだけです。

以前は startScan() メソッドは、携帯電話で位置情報サービスが無効になっていても実行され、結果を返しました。しかし、Marshmallow では、携帯電話で位置情報サービスが有効になっておらず、コース/詳細位置情報のアクセス許可がマニフェストに残っている場合、同じアプリケーションは "スキャン" ですが静かに失敗して結果を返さなくなりました。

どのように解決するのですか?

いいえ、これはバグではありません。

これは 問題 の問題は Google に報告され、Google はこれが意図された動作であり、修正しないと回答しました。彼らは開発者に対し このサイト に誘導し、ハードウェア識別子へのアクセスには位置情報の許可が必要であることを指摘しました。 現在では、開発者の責任において、ユーザーにこの要件を認識させる必要があります。

しかし、この問題では、位置情報サービス (GPS など) が必要な理由には触れておらず、意図された動作としてマークされているため、これを説明するためにこの問題を再訪するつもりはないようです。

質問の 2 番目の部分にお答えします。はい、位置情報サービスを有効にせずにスキャンすることは可能です。Bluetooth クラシック スキャンを行うには BluetoothAdapter.getDefaultAdapter().startDiscovery() を使用してBluetoothクラシックスキャンを行うことができます。これは位置情報サービスをオフにしても動作します。これは、BLEおよびそれ以外のすべてのBluetoothデバイスを検出します。しかし、BLE デバイスには、以下のようなスキャン記録が残りません。 startScan() .