无法解析符号“ ACCESS_BACKGROUND_LOCATION”

时间:2019-09-20 11:25:46

标签: android

实际上,我正在尝试使我现有的应用程序在Android-10(Q)上兼容。下面是如何在build.gradle文件中设置编译和目标sdk版本的方法-

android {
    compileSdkVersion 29
    buildToolsVersion '29.0.0'
    defaultConfig {
        applicationId "com.xyz.myapp"
        minSdkVersion 17
        targetSdkVersion 29
        versionCode 83
        versionName "83.0"
        multiDexEnabled true;
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

及以下是在将应用程序迁移到Android-X之后我正在使用的支持库依赖项

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.multidex:multidex:2.0.0'

我已经完成了将项目迁移到Android-X的工作,并且还从sdk管理器安装了Android9。+(Q)API级别29,但仍然出现“无法解析符号'ACCESS_BACKGROUND_LOCATION'”错误。我要求您指导我解决此问题。另外,请告知我是否可以提供更多详细信息。谢谢。

2 个答案:

答案 0 :(得分:2)

在定位Android 9或更低版本时

如果您的应用请求 ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION ,系统会自动向请求添加 ACCESS_BACKGROUND_LOCATION

将设备升级到Android 10时访问

如果用户授予您的应用访问设备位置的权限- ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION –然后将其设备从Android 9升级到Android 10,系统会自动更新设置授予您的应用的基于位置的权限。升级后,您的应用程序获得的权限集取决于其目标SDK版本及其定义的权限。

阅读官方指南Privacy changes in Android 10

如果您定位到SDK 29+,并且要在后台访问位置,则应在清单中添加以下内容

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

运行时权限

private static final int PERMISSION_REQUEST_FINE_LOCATION = 99;
private static final int PERMISSION_REQUEST_BACKGROUND_LOCATION = 100;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    {
            if (this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                if (this.checkSelfPermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {
                    if (this.shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)) {

                        // Dialog for grant Permission
                    }
                    else {

                       // Dialog for Required permission

                    }

                }
            } 
    }

答案 1 :(得分:0)

您引用的错误消息与与Android权限相关的隐私政策有关。 Android 10引入了ACCESS_BACKGROUND_LOCATION权限。 API级别29指定在后台访问设备位置需要此权限。为此,您需要将targetSdkVersioncompileSdkVersion设置为29或更高。 尝试在清单中明确显示权限,以获取前台和后台的权限

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />