Комментарии 17
Меня удивляет в последних Android необходимость ACCESS_FINE_LOCATION для работы с BLE. Я предпочитаю держать на телефоне локацию отключенной (чтобы был отключен GPS), но это приводит к тому, что BLE устройства отваливаются.
Особенно это отпугивает потенциальных пользователей: делаешь приложение для работы с BLE девайсом, а оно просит доступ к локации. У пользователя сразу паранойя включается (что совершенно разумно).
Там логика чуть «обратная»: приложение, имеющее доступ к Bluetooth (и только к нему), потенциально уже может отслеживать положение (относительно других устройств, среди которых бывают и специально маячки), о чём и ставят в известность пользователя.
Справедливости ради, ACCESS_FINE_LOCATION требуется только для первоначального сканирования, для фазы подключения/обмена этот permission не требуется.
Официальная документация говорит Required only if your app isn't using the Device Companion Manager.
Обычно, перед сканированием, у пользователя показывается UI попап с объяснением почему нужен доступ к геолокации.
При использовании Companion Device Api пермишен на локацию ни на одном этапе не нужен, включая сканирование
Да это шаг вперед, согласен, но я не нашел способа добавить больше чем 1 устройство за раз. Что интересно, я могу показать все нужные устройства, но вот добавлять системный UI дает только по одному.
но я не нашел способа добавить больше чем 1 устройство за раз
Это как? В bounded? Я сейчас делаю open-source приложение как раз с использованием Companion API, выглядит это так:

Есть ещё забавное поведение, которое нигде не документируется - для работы этого API необходимо чтобы на девайсе была включена локация. Сам API не обрабатывает кейс когда локация выключена. Поэтому все равно придется просить пользователя включить местоположение ручками
Ну вот я про этот системный диалог говорю, как в нем выбрать сразу 2 девайса? Там singleSelect и повлиять я не смог на это.
Да локация нужна как системный сервис, CompanionApi вроде как доверенное и ему пермишен локации не нужен, но сервис таки требуется.
Таким образом, если разместить Bluetooth-маячок, который запоминает сканирующие его устройства, то это позволяет владельцу маячка знать о местоположении смартфонов. По этой причине Android требует это разрешение, ведь действительно активное сканирование может дать другим информацию о вашем местоположении.
А вот дальше вступает в дело реализация вендора. Android требует разрешение, а не информацию о местопложении. Некоторые вендоры действительно не возвращают результаты поиска, если GPS отключен, но некоторые возвращают, при чём это может разниться от разных версий Android для одной и той же модели у одного и того же вендора.
googlechrome.github.io/samples/web-bluetooth/scan.html
Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)