【问题标题】:Cannot resolve symbol 'ACCESS_BACKGROUND_LOCATION'无法解析符号“ACCESS_BACKGROUND_LOCATION”
【发布时间】:2019-09-20 11:25:46
【问题描述】:

实际上,我正在尝试使我现有的应用程序在 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-Level 29,但我仍然收到“无法解析符号 'ACCESS_BACKGROUND_LOCATION'”错误。我请求你指导我解决这个问题。另外,请让我知道我是否可以提供更多详细信息。谢谢。

【问题讨论】:

  • 您找到解决方案了吗?我有同样的问题。
  • 如何导入ACCESS_BACKGROUND_LOCATION
  • ACCESS_BACKGROUND_LOCATION 是在 API 级别 29 中添加的,这可能与您的 minSdkVersion 17 设置相矛盾。
  • 如果将全名指定为android.permission.ACCESS_BACKGROUND_LOCATION,您可能会获得更好的运气
  • 你能贴出产生这个错误的代码吗?

标签: android


【解决方案1】:

针对 Android 9 或更低版本时

如果您的应用请求 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION,系统会自动将 ACCESS_BACKGROUND_LOCATION 添加到请求中。

设备升级到 Android 10 时访问

如果用户授予您的应用访问设备位置的权限 - ACCESS_COARSE_LOCATIONACCESS_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

                    }

                }
            } 
    }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2016-12-31
      • 1970-01-01
      相关资源
      最近更新 更多