Разрешение на определение местоположения 23

Я использую библиотеку altbeacon для мониторинга и диапазона маяков. Я прочитал вашу страницу запроса разрешения и просто хочу знать, если я нацелю разрешение на определение местоположения для API 23+ (), будет ли сканирование работать на устройствах с API ‹ 23? У меня нет реального устройства, поэтому я не могу его проверить. Или есть способ не запрашивать разрешение на определение местоположения с помощью устройства с API ниже 23? Спасибо за ваши ответы


person Michal Štefanec    schedule 30.09.2016    source источник
comment
Почему бы вам не использовать виртуальное устройство для проведения теста? Все API доступны. Просто для информации, API 23 внес огромное изменение в разрешение, поэтому разрешение должно проверяться во время выполнения, до этого используется манифест, поэтому нет причин блокировать его.   -  person AxelH    schedule 30.09.2016
comment
виртуальное устройство не может использовать Bluetooth, необходимо сканировать маяки.   -  person Michal Štefanec    schedule 30.09.2016
comment
Мой плохой, но остальная часть комментария остается в силе. Вам нужно по-разному управлять разрешением для предыдущих 23 и остальных.   -  person AxelH    schedule 30.09.2016
comment
да, но мой вопрос в том, смогу ли я сканировать маяки на устройствах с API ‹ 23, если я использую службу определения местоположения только на устройствах с API ›= 23   -  person Michal Štefanec    schedule 30.09.2016
comment
И снова, если вы правильно управляете своим разрешением, да (если только API не поддерживает этот API). Изменение только для более нового API (23+), для остальных код будет пропущен (ну ваше условие должно сделать это) и он будет работать. По сути, вам просто нужно использовать ложные данные Bluetooth, чтобы проверить, будет ли это работать, и то же самое для местоположения в AVD, чтобы быть уверенным, нет необходимости тестировать настоящий маяк.   -  person AxelH    schedule 30.09.2016


Ответы (2)


Повторяю основной вопрос:

Если вы создадите приложение с minSdkVersion ‹ 23, но targetSdkVersion >= 23, что произойдет, когда вы попытаетесь найти маяки Bluetooth?

Короткий ответ: работает.

Более длинный ответ:

  • Запрос разрешений пользователя не будет выполнен. с minSdkVersion ‹ 23 компилятор не позволит вам включить строку кода, например requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
, поскольку она не будет работать в более ранних версиях Android. Если вы завернете его в оператор if, например if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M), он не будет выполнен. Если вы добавите такие аннотации, как @SuppressLint("NewApi"), приложение вылетит при попытке выполнить код.

  • Сканирование маяка будет работать как в активном, так и в фоновом режиме, независимо от того, что права пользователя не предоставлены. Более ранние версии Android не могут запрашивать разрешение у пользователя, поэтому приложение просто ведет себя так, как если бы они были предоставлены.

person davidgyoung    schedule 30.09.2016

На Android 23 и более поздних версиях вам необходимо проверить, предоставлено ли приложению «опасное» разрешение, и если нет, запросить у пользователя.
В библиотеке поддержки Android есть вспомогательные функции для этого.
См. Запрос разрешений во время выполнения. Основными функциями являются checkSelfPermission и requestPermissions.
Чтобы не было проблем с более старыми версиями Android, вы можете использовать следующее, чтобы проверить, работаете ли вы на устройстве с Marshmallow или нет:

public static boolean isMNC() {     
   return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}

Это вернет true, если вы используете устройство с Marshmallow или новее, false в противном случае. Итак, если это возвращает true, проверьте разрешение, в противном случае не делайте этого.
Возможно, вам также следует использовать аннотацию @SuppressLint("NewApi") для функции, в которой вы вызываете checkSelfPermission и requestPermissions.

person jvlach    schedule 30.09.2016
comment
на основе: ссылки. Я не знаю, будет ли библиотека работать сканировать маяки, если разрешение только для API 23+ .. это то, о чем я прошу: D - person Michal Štefanec; 30.09.2016
comment
Просматривая AndroidManifest библиотеки Android Beacon 2.9.1, он использует следующее для включения разрешения ACCESS_COARSE_LOCATION: ‹uses-permission-sdk-23 android:name=android.permission.ACCESS_COARSE_LOCATION /› Это означает, что разрешение запрашивается только на устройства с API 23 и выше, поэтому на более низких API он не нужен. Значит, должно работать нормально. Это также может вам помочь: stackoverflow.com/questions/ 35988149/ - person jvlach; 30.09.2016