Всякий раз, когда я пытаюсь подключить свой Samsung Galaxy S6 с Android 6.0.1 к устройству с поддержкой Bluetooth, он говорит мне включить «службы определения местоположения».
Когда я пожаловался на это, поставщик программного обеспечения ответил: «Недавние обновления API Google Android, затрагивающие технологию Bluetooth LE, требуют предоставления разрешений на местоположение для использования приложения».
Я не вижу необходимости в этом.
Эта дискуссия говорит об этом. В техническом справочнике говорится, что приложения должны иметь определенные разрешения , а не то, чтобы службы определения местоположения были активными.
Чтобы получить доступ к аппаратным идентификаторам соседних внешних устройств через сканирование Bluetooth и Wi-Fi, ваше приложение должно теперь иметь разрешения ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION
Вопрос . Означает ли это, что утверждение поставщика программного обеспечения неверно?
источник
Ответы:
Мое понимание Bluetooth заключается в том, что приложения, использующие Bluetooth, имеют прямой доступ к MAC-адресу устройства для сопряжения. Я приму это за этот ответ.
Если вы можете прочитать MAC-адреса передатчиков WiFi или Bluetooth, вы можете найти устройство. Вот как работает местоположение WiFi / Bluetooth; Вы слушаете MAC-адреса передатчиков и ищите их в гигантской глобальной базе данных.
Следовательно, любое приложение, использующее Bluetooth и подключение для передачи данных, теоретически может обнаружить ваше устройство. Я не уверен, что это практически возможно; Bluetooth не имеет такой же зоны действия и полупостоянной инфраструктуры доступа, как WiFi.
Требуя, чтобы службы определения местоположения имели доступ к Bluetooth, вы гарантируете, что пользователь понимает, что информация о его местонахождении может просочиться при использовании Bluetooth. В версиях Android до Marshmallow пользователь мог использовать Bluetooth без включенных служб определения местоположения, но информация о местоположении могла просочиться. В этих старых версиях вы также могли запускать сканирование WiFi, чтобы найти MAC-адреса без включенных служб определения местоположения, что снова означало, что информация о вашем местоположении может просочиться. Требование разрешить службам определения местоположения использовать Bluetooth означает, что тот, кто отключает местоположение, сохраняет свое местоположение в секрете.
Я бы охарактеризовал эту проблему как проблему дизайна, а не как ошибку. Возможно, ошибка исправима, но мне не совсем понятно, что вы можете использовать Bluetooth вообще без утечки информации о местоположении. Bluetooth был создан раньше, чем кто-либо рассматривал услуги определения местоположения через WiFi и Bluetooth.
источник
Поставщик верен, вам нужно включить службы определения местоположения для сканирования устройств WiFi или Bluetooth LE.
Смотрите ошибку # 185370 для деталей. Google сказал, что они исправили это в «будущем выпуске», но согласно комментариям к ошибке, это все еще не исправлено в Android 7
Изменить: Ранее я говорил, что службы определения местоположения требуются, только когда приложение, запускающее сканирование, работает в фоновом режиме. Исходный код указывает, что это верно, только если API-Target <Android M.
источник