Мое приложение не запрашивает разрешение на определение местоположения, и разрешение автоматически отклоняется
Я запросил разрешение на местоположение в моем файле манифеста следующим образом:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Я также запросил разрешение времени выполнения следующим образом:
//get location permission
int locationPermissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
if (locationPermissionCheck != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(mContext, "Location permission denied", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION);
} else {
Toast.makeText(mContext, "Location permission granted", Toast.LENGTH_SHORT).show();
}
Когда я устанавливаю приложение из студии Android на подключенное устройство (Android 10), я не вижу запроса о местоположении, вместо этого я вижу всплывающее сообщение «Разрешение на местоположение отклонено». Затем я перехожу к разрешению приложения и вижу, что разрешение на местоположение отклонено. Затем я разрешаю, закрываю приложение и снова открываю его, и тогда оно работает. Затем я удаляю приложение и снова устанавливаю. И тогда разрешение на местоположение снова автоматически отклоняется, даже до того, как я запустил приложение.
Я запрашиваю разрешение времени выполнения у MainActivty и использую Fused Location в службе переднего плана. Я старался
((ActivityManager)context.getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData();
без везения.
1 ответ
На Android 10 (уровень API 29) и выше необходимо объявить
ACCESS_BACKGROUND_LOCATION
разрешение в манифесте вашего приложения для запроса доступа к фоновому местоположению во время выполнения. В более ранних версиях Android, когда ваше приложение получает доступ к местоположению на переднем плане, оно также автоматически получает доступ к местоположению в фоновом режиме.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
Посетите документацию по местоположению Android, чтобы узнать больше.