实际上,我正在尝试使我现有的应用程序在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'”错误。我要求您指导我解决此问题。另外,请告知我是否可以提供更多详细信息。谢谢。
答案 0 :(得分:2)
如果您的应用请求 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION ,系统会自动向请求添加 ACCESS_BACKGROUND_LOCATION 。
如果用户授予您的应用访问设备位置的权限- 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指定在后台访问设备位置需要此权限。为此,您需要将targetSdkVersion
或compileSdkVersion
设置为29
或更高。
尝试在清单中明确显示权限,以获取前台和后台的权限
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />