Android 14: Ранее предоставлено прекрасное разрешение на местонахождение, не сохраняющееся при отрицании разрешения на мAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android 14: Ранее предоставлено прекрасное разрешение на местонахождение, не сохраняющееся при отрицании разрешения на м

Сообщение Anonymous »

Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователю предложено для разрешения на местоположное местоположение, он «не разрешается» нажат, процесс моего приложения заканчивается и перезагружается. После перезапуска он ведет себя, поскольку оно и разрешение на точное местоположение вместе с некоторыми другими никогда не было предоставлено, даже если оно было предоставлено до подсказки о фоновом разрешении. Я на Android 14. < /P>
Вот что происходит подробно: < /p>

Открыть приложение < /li>
Пользовательские гранты access_fine_location < /li>
Затем приложение показывает диалог. В диалоговом окне «Фоновое разрешение. Manifest.permission.access_fine_location) Но вместо этого он возвращает отклонено разрешение.public class LoginActivity extends AppCompatActivity {

private final ActivityResultLauncher requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), permissions -> {
boolean allGranted = true;
for (String permission : permissions.keySet()) {
boolean granted = Boolean.TRUE.equals(permissions.get(permission));
Log.d("APP", permission + " Permission: " + (granted ? "Granted" : "Denied"));
if (!granted) allGranted = false;
}

if (Permissions.hasLocationPermission(this)
&& Permissions.shouldRequestBackgroundPermission(this)) {
requestBackgroundLocation();
return;
}

// ...
});

private final ActivityResultLauncher requestBackgroundLocationLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
Log.d("APP", "Background location granted");
} else {
Log.d("APP", "Background location denied");
}
});

private void requestBackgroundLocation() {
new MaterialAlertDialogBuilder(this)
.setTitle("Background access")
.setMessage("This app requires background location...")
.setPositiveButton("OK", (dialog, which) ->
requestBackgroundLocationLauncher.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION))
.show();
}

private void startLocationService() {
if (Permissions.hasBackgroundLocationPermission(this)) {
Log.d(Constants.TAG, "Starting background location service");
Intent serviceIntent = new Intent(this, LocationService.class);
ContextCompat.startForegroundService(this, serviceIntent);
} else {
Log.d(Constants.TAG, "Background location not granted; skipping service start");
}
}

...

}
< /code>
permissions.java
public class Permissions {
public static boolean hasLocationPermission(Context context) {
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED;
}

public static boolean hasBackgroundLocationPermission(Context context) {
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION)
== PackageManager.PERMISSION_GRANTED;
}

public static boolean shouldRequestBackgroundPermission(Context context) {
return hasLocationPermission(context) && !hasBackgroundLocationPermission(context);
}
}
< /code>
ps. Я уже добавил все необходимые объявления о фоновом местоположении в файле Manifest, а также внедренный класс услуг.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... hen-denyin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»