#android #ionic-framework #android-location #ionic-native
#Android #ionic-framework #android-местоположение #ionic-родной
Вопрос:
Я пытаюсь использовать уровень API 29 в своем приложении ionic, и мне требуется, чтобы приложение запрашивало у пользователя местоположение «Разрешить все время». Я добавил все предложенные изменения.
Мой AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION">
<uses-permission android:name="android.permission.PERMISSION.FOREGROUND_SERVICE">
My app.component.ts:
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
this.setProviders();
this.checkBackgroundPermission();
});
}
private async checkBackgroundPermission() {
try {
const result = await this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION);
if (!result || result.hasPermission === false) {
this.requestPermissions();
}
} catch (error) {
this.requestPermissions();
}
}
private async requestPermissions() {
try {
const data = await this.androidPermissions.requestPermissions([
this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION,
this.androidPermissions.PERMISSION.ACCESS_COARSE_LOCATION,
this.androidPermissions.PERMISSION.ACCESS_FINE_LOCATION,
this.androidPermissions.PERMISSION.ACTIVITY_RECOGNITION,
this.androidPermissions.PERMISSION.FOREGROUND_SERVICE
]);
if (!data.hasPermission) {
throw new Error('No permission');
}
} catch (error) {
await this.alertService.showAlert(
'Background location',
'We need background location access in order to continue.'
);
this.signOut();
}
Однако, когда я настраиваю уровень Api 29, он не показывает запрос на разрешение местоположения все время.
Но если я использую уровень Api 28, он показывает разрешение, которое мне нужно
Есть предложения, как заставить это работать?
Комментарии:
1. Поскольку я использую
ionic-native/background-geolocation
, он прерывается, когда пользователь не разрешает местоположение все время.2. Возникает точно такая же проблема.
3. Есть ли какие-либо успехи в получении запроса «Все время»?
4. Нет, я собираюсь попробовать ответить Дэвиду Баку ниже
Ответ №1:
У меня была точно такая же проблема. У меня сработало следующее.
- Используйте AndroidPermissions для запроса следующих разрешений.
const data = await this.androidPermissions.requestPermissions([ "android.permission.ACCESS_BACKGROUND_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", this.androidPermissions.PERMISSION.ACCESS_FINE_LOCATION, ]);
Обратите внимание на строку "android.permission.ACCESS_BACKGROUND_LOCATION"
вместо this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION
, которая фактически не определена во время выполнения. Я предполагаю, что ACCESS_BACKGROUND_LOCATION
разрешения не существовало, когда AndroidPermissions
был выпущен плагин.
-
Вызовите
requestPermissions
метод перед фоновым размещением. Это очень важно. -
Добавить
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
к platformsandroidappsrcmainAndroidManifest.xml
Комментарии:
1. Теперь мне нужно получить местоположение в фоновом режиме
Ответ №2:
В месте, куда вы вызываете, проверьте разрешение для ACCESS_BACKGROUND_LOCATION, также проверьте ACCESS_FINE_LOCATION и, если какой-либо из них не найден, вызовите свой метод requestPermissions. Это должно помочь.
Ответ №3:
- добавьте это в
platformsandroidappsrcmainAndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
- изменение в
Geolocation.java
файле (плагин геолокации)
- Удалить :
String [] permissions = { Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }
- замените его на :
String [] permissions = { Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION };