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