Код: Выделить всё
{
boolean hasAllPermissions = true;
for (Boolean value : result.values()) {
hasAllPermissions = hasAllPermissions && value;
}
if (hasAllPermissions){
startLocationService();
}
else {
needsPermissionsDialog.show();
}
});
private void checkPermissions() {
permissionRequest.launch(new String[]{
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.POST_NOTIFICATIONS,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.FOREGROUND_SERVICE,
Manifest.permission.FOREGROUND_SERVICE_LOCATION
});
}
private void startLocationService(){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (locationService == null) {
Intent locationServiceIntent = new Intent(MainActivity.this, LocationService.class);
startForegroundService(locationServiceIntent);
bindService(locationServiceIntent, locationServiceConnection, 0);
}
}
else {
Toast.makeText(this, "Missing location permission", Toast.LENGTH_SHORT).show();
}
}
Я также пробовал поставить вызов методов onCreate() и onStart() в качестве первого шага, но не имел никакого значения. Поведение все время одинаковое. Никогда не удавалось предоставить разрешения FINE_LOCATION
Код: Выделить всё
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == LOGIN_ACTIVITY_REQUEST) {
if (resultCode == RESULT_OK) {
checkPermissions();
...
Однако на Android 14 ActivityResultContracts.RequestMultiplePermissions( ) результат имеет значение false для разрешения ACCESS_FINE_LOCATION.
Когда я отключаю разрешение в настройках (android) для приложения, оно запрашивает разрешение (см. изображение). но он предоставляет его только для ACCESS_BACKGROUND_LOCATION, а результат ACCESS_FINE_LOCATION по-прежнему остается ложным.
Если я удалю ACCESS_BACKGROUND_LOCATION из манифеста, Опция разрешения местоположения в настройках (Android) приложения исчезла. Если удалить его из списка разрешенийRequest.launch(), я не получу приглашения разрешить доступ к местоположению.
Это также не имеет значения, если я добавлю/заменю FINE на ACCESS_COARSE_LOCATION где угодно (список или манифест). В результате он также всегда становится ложным.
Все остальные диалоговые окна запроса разрешений работают нормально.
Проблема была воспроизведена на двух устройствах Xiaomi и одном устройстве Pixel. , так что это даже не зависит от устройства.

< /p>
P.S. Я знаю, что это мой третий вопрос в этой теме, но это также моя третья реализация, и до сих пор нет результата.
Подробнее здесь: https://stackoverflow.com/questions/786 ... or-granted
Мобильная версия