【发布时间】:2021-05-27 07:51:03
【问题描述】:
在 MainActivity 我请求权限:
对于 api >=29
当我请求权限时,此代码不显示提示
public boolean RequestPermissions(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {// api 29++
final String[] PERMISSIONS_API_Q = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
};
if ( checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED
)
{//Permissions Granted
GB.LOG("Permissions is granted");
getAndroidId();// getting device information
GB.isPermissionsGranted = true;
if(MainFragment.MainHandler!=null){
MainFragment.MainHandler.sendEmptyMessage(1);
}
LoadFoldersPath();
if(GB.CanManualMode){
CanConfig cc = new CanConfig();
cc.execute();
}
return true;
}
else {//Permissions is revoked
GB.LOG("Permissions is revoked");
Dialogs LocationInfoDialog = new Dialogs(MainActivity.this);
View.OnClickListener onClickListener= v -> {
ActivityCompat.requestPermissions(this, PERMISSIONS_API_Q, REQUEST); //here is permission request
GB.isPermissionsGranted = false;
};
LocationInfoDialog.GPSUsageInBackGroundInfo(onClickListener);
return false;
}
}
}
当我删除这些行时
> Manifest.permission.ACCESS_BACKGROUND_LOCATION
> checkSelfPermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION) ==
> PackageManager.PERMISSION_GRANTED
这段代码运行良好
public boolean RequestPermissions(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {// api 29++
final String[] PERMISSIONS_API_Q = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_COARSE_LOCATION,
};
if ( checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
)
{//Permissions Granted
GB.LOG("Permissions is granted");
getAndroidId();// getting device information
GB.isPermissionsGranted = true;
if(MainFragment.MainHandler!=null){
MainFragment.MainHandler.sendEmptyMessage(1);
}
LoadFoldersPath();
if(GB.CanManualMode){
CanConfig cc = new CanConfig();
cc.execute();
}
return true;
}
else {//Permissions is revoked
GB.LOG("Permissions is revoked");
Dialogs LocationInfoDialog = new Dialogs(MainActivity.this);
View.OnClickListener onClickListener= v -> {
ActivityCompat.requestPermissions(this, PERMISSIONS_API_Q, REQUEST); //here is permission request
GB.isPermissionsGranted = false;
};
LocationInfoDialog.GPSUsageInBackGroundInfo(onClickListener);
return false;
}
}
}
您甚至可以在此处比较这两个代码以查看区别https://text-compare.com/
但如果我从请求中删除 ACCESS_BACKGROUND_LOCATION 一切正常,问题出在哪里?
【问题讨论】:
-
when requesting list of permission您请求的不是权限列表,而是一一检查。此外,还可以请求权限列表。此外,不清楚您正在谈论哪个提示,因为检查权限不会导致提示。 -
but if i remove ACCESS_BACKGROUND_LOCATION from request我们看不到您如何请求该权限。我们只看到您在 if 语句中检查它。目前还不清楚您要移除的东西在哪里。 -
where is problem ?请更好地描述您的问题。 -
ActivityCompat.requestPermissions(this, PERMISSIONS_API_Q, REQUEST);这是我请求权限的行,它在代码中 //Permissions is revked
-
你认为我们知道那个调用会做什么?用哪种方法?您能否对我的 cmets 做出反应,因为我没有答案,我仍然不知道问题所在。
标签: java android permissions