Ionic 始终允许定位 API 级别 29
Posted
技术标签:
【中文标题】Ionic 始终允许定位 API 级别 29【英文标题】:Ionic Allow location all the time API level 29 【发布时间】:2020-12-19 21:50:19 【问题描述】:我正在尝试在我的 ionic 应用上使用 API 级别 29,并且我要求该应用向用户询问“始终允许”位置。我已经添加了所有建议的修改。
我的 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">
我的 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 Level 29 为目标时,它不会一直显示允许位置的请求。
但如果我使用 Api Level 28,它会显示我需要的权限
有什么建议可以完成这项工作吗?
【问题讨论】:
因为我使用的是ionic-native/background-geolocation
,所以当用户一直不允许定位时它会中断。
遇到完全相同的问题。
能否获得“所有时间”的提示?
不,我要试试下面的 David Buck 回答
【参考方案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
,它在运行时实际上是未定义的。我的猜测是AndroidPermissions
插件发布时ACCESS_BACKGROUND_LOCATION
权限不存在。
在后台定位之前调用requestPermissions
方法。这很重要。
将<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
添加到platforms\android\app\src\main\AndroidManifest.xml
【讨论】:
现在我需要在后台获取位置【参考方案2】:在您调用 ACCESS_BACKGROUND_LOCATION 检查权限的地方,还要检查 ACCESS_FINE_LOCATION,如果没有找到,请调用您的 requestPermissions 方法。这应该会有所帮助。
【讨论】:
【参考方案3】:-
将此添加到
platforms\android\app\src\main\AndroidManifest.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 ;
【讨论】:
以上是关于Ionic 始终允许定位 API 级别 29的主要内容,如果未能解决你的问题,请参考以下文章
我想将我的应用程序目标sdk版本29降级到28,google play控制台可以允许吗?
ionic 使用百度地图API, 定位用户当前所在的城市示例