Java targetSdkVersion 30,不提示用户输入权限
从安卓11开始,我在申请Pixel 3a Xl的权限时遇到了麻烦(在升级到安卓11之后) 因此,我有一个应用程序gradle文件:Java targetSdkVersion 30,不提示用户输入权限,java,android,android-studio,Java,Android,Android Studio,从安卓11开始,我在申请Pixel 3a Xl的权限时遇到了麻烦(在升级到安卓11之后) 因此,我有一个应用程序gradle文件: apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 30 buildToolsVersion '30.0.2' defaultConfig { ap
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion 30
buildToolsVersion '30.0.2'
defaultConfig {
applicationId "nnt.codecexp"
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation "com.google.android.gms:play-services-maps:17.0.0"
implementation "com.google.android.gms:play-services-location:17.0.0"
}
以及主要活动的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
}
@Override
protected void onStart() {
super.onStart();
String[] permissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
};
requestPermissions(permissions, 0);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
boolean isGranted = grantResults[i] >= 0;
Log.d("atf", permission+" isGranted: "+isGranted);
}
}
}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
}
@凌驾
受保护的void onStart(){
super.onStart();
字符串[]权限={
Manifest.permission.ACCESS\u位置,
Manifest.permission.ACCESS\u FINE\u位置,
Manifest.permission.ACCESS\u BACKGROUND\u位置
};
请求权限(权限,0);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
for(int i=0;i=0;
日志d(“atf”,权限+”已授予:“+已授予”);
}
}
}
我从Android Studio在我的设备上重新安装了一个应用程序,日志显示权限会自动被拒绝,而不会得到任何授予权限的提示。(未显示提示窗口)。我了解,在android 11上,如果用户拒绝权限2次,系统将跳过以下权限请求的提示对话框,并自动拒绝。但事实并非如此,问题发生在新安装应用程序之后。(从Android Studio启动时,设备上不存在该应用程序)
但是:
如果我将渐变文件“targetSdkVersion 30”更改为“targetSdkVersion 29”
一切正常,正如预期的那样
有谁能告诉我为什么会发生这种情况,并为这个问题保留“targetSdkVersion 29”一个好的解决方案吗
我做错什么了吗?或者这仅仅是谷歌的[删剪][删剪][删剪]。根据:
如指南中所述,您应该执行增量位置请求。如果您的应用程序针对Android 11或更高版本,系统将强制执行此最佳实践如果您同时请求前台位置权限和后台位置权限,系统将忽略该请求,并且不会授予您的应用任何一项权限。
您在请求位置权限的同时请求后台位置。您需要首先请求位置权限,然后分别请求访问\u后台\u位置
权限。根据:
如指南中所述,您应该执行增量位置请求。如果您的应用程序针对Android 11或更高版本,系统将强制执行此最佳实践如果您同时请求前台位置权限和后台位置权限,系统将忽略该请求,并且不会授予您的应用任何一项权限。
您在请求位置权限的同时请求后台位置。您需要首先请求位置权限,然后分别请求ACCESS\u BACKGROUND\u location
权限