Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователю предложено для разрешения на местоположное местоположение, он «не разрешается» нажат, процесс моего приложения заканчивается и перезагружается. После перезапуска он ведет себя, поскольку оно и разрешение на точное местоположение вместе с некоторыми другими никогда не было предоставлено, даже если оно было предоставлено до подсказки о фоновом разрешении. Я на 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
Android 14: Ранее предоставлено прекрасное разрешение на местонахождение, не сохраняющееся при отрицании разрешения на м ⇐ Android
Форум для тех, кто программирует под Android
1759785668
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, а также внедренный класс услуг.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79784086/android-14-previously-granted-fine-location-permission-not-retained-when-denyin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия