我的应用程序没有请求位置权限,权限被自动拒绝

时间:2021-02-22 11:34:32

标签: java android geolocation permission-denied android-10.0

我已在清单文件中请求位置权限,如下所示 -

<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();

运气不好。

1 个答案:

答案 0 :(得分:1)

在 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 了解更多。