问题描述
我已在清单文件中请求位置权限,如下所示 -
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
我还请求了运行时权限,如下所示 -
//get location permission
int locationPermissionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION);
if (locationPermissionCheck != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(mContext,"Location permission denied",Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_FINE_LOCATION);
} else {
Toast.makeText(mContext,"Location permission granted",Toast.LENGTH_SHORT).show();
}
当我将应用程序从 android studio 安装到连接的设备(android 10)时,我看不到位置请求,而是看到吐司消息“位置权限被拒绝”。然后我转到应用程序权限并看到位置权限被拒绝。然后我允许它,关闭应用程序并重新打开它,然后它就可以工作了。然后我卸载该应用程序并重新安装。然后即使在我运行应用程序之前,位置权限也会被自动拒绝。
我正在请求 MainActivty 的运行时许可并在前台服务中使用 Fused Location。我试过了
((ActivityManager)context.getSystemService(ACTIVITY_SERVICE)).clearapplicationUserData();
运气不好。
解决方法
在 Android 10(API 级别 29)及更高版本上,您必须在应用的清单中声明 ACCESS_BACKGROUND_LOCATION
权限才能在运行时请求后台位置访问。在早期版本的 Android 上,当您的应用获得前台位置访问权限时,它也会自动获得后台位置访问权限。
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
访问 Android Location Documentation 了解更多。