仅在前台访问设备位置的权限

Fol*_*lli 7 android android-permissions

我的应用程序仅在前台使用位置数据。因为Android 10区分了后台和前台的位置,所以我想把manifest.xml中的权限设置的尽量少,以免打扰用户。

发行说明 ( https://developer.android.com/about/versions/10/privacy/changes ) 声明如下:如果我将目标 SDK 放到 Android 10 (29) 并且只在清单中请求 ACCESS_FINE_LOCATION(故意排除新的 ACCESS_BACKGROUND_LOCATION 权限),我应该只获得前台访问权限(这就是我想要的)。

在成绩文件中:

compileSdkVersion 29
    defaultConfig {
        applicationId "com.genewarrior.sunlocator"
        minSdkVersion 24
        targetSdkVersion 29
        versionCode 70
        versionName "3.10"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
Run Code Online (Sandbox Code Playgroud)

在清单文件中:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud)

但是,与预期的“仅在使用应用程序时允许”不同,仍然可以在“位置”权限中选择“始终允许”。

也时不时弹出通知“应用程序在后台获取了您的位置”,这正是我想要避免的。

在此处输入图片说明

Pat*_*Pat 4

我认为你的做法是正确的。您只能为您的应用请求“仅在使用应用时允许”的位置权限。在请求代码中,您只需请求 ACCESS_FINE_LOCATION 权限,在本例中:

ActivityCompat.requestPermissions(thisActivity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1234)
Run Code Online (Sandbox Code Playgroud)

并仅将 ACCESS_FINE_LOCATION 放入清单中。

您在应用程序位置设置中看到“始终允许”。正如 @greywolf82 所建议的,您的某些依赖项中可能包含 ACCESS_BACKGROUND_LOCATION 权限。

在此输入图像描述 在此输入图像描述