我有一个创建两个文件夹并在这两个文件夹中存储数据的应用程序。当我在Marshmallow下面的版本上运行此应用程序时,一切正常。但是当我在Marshmallow上运行相同的应用程序时,除非我授予权限,否则不会创建该文件夹通过进入应用程序设置手动。 这是我用来检查权限的代码: -
private boolean checkWritePermission(){
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED){
Log.d("WRITE_PERMISSION","Permission granted");
return true;
} else {
return false;
}
}
private boolean checkReadPermission(){
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED){
Log.d("READ_PERMISSION","Permission granted");
return true;
} else {
return false;
}
}
这是我用来请求权限的代码: -
private void requestReadPermission()
{
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.READ_EXTERNAL_STORAGE)){
Toast.makeText(context,"This permission allows you to read downloaded magazine",Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE_READ);
}
}
private void requestWritePermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(context,"This permission allows you to download the magazine",Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},PERMISSION_REQUEST_CODE_WRITE);
}
}
private void requestInternetPermission()
{
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.INTERNET)){
}else{
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.INTERNET},PERMISSION_REQUEST_CODE_INTERNET);
}
}
这是onRequestPermissionsResult的代码: -
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode)
{
case PERMISSION_REQUEST_CODE_READ:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
}else
{
}
break;
case PERMISSION_REQUEST_CODE_WRITE:
if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
}else
{
}
break;
case PERMISSION_REQUEST_CODE_INTERNET:
if (grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
}else
{
}
break;
}
}
我在oncreate中检查权限如下: -
if (checkReadPermission() && checkWritePermission())
{
Log.d("ALL PERMISSIONS","All permissions granted");
}else
{
requestInternetPermission();
requestReadPermission();
requestWritePermission();
}
答案 0 :(得分:1)
检查权限的代码有几个问题:
if (checkReadPermission() && checkWritePermission()) {
Log.d("ALL PERMISSIONS","All permissions granted");
} else {
requestInternetPermission();
requestReadPermission();
requestWritePermission();
}
Manifest.permission.INTERNET
。这是一个易受攻击的许可,因此总是被授予,这就是为什么你总是得到许可。permission-group.STORAGE
的一项许可。这是请求:Manifest.permission.READ_EXTERNAL_STORAGE
或Manifest.permission.WRITE_EXTERNAL_STORAGE
尝试使用此代码:
if (checkWritePermission()) {
Log.d("ALL PERMISSIONS","All permissions granted");
} else {
requestWritePermission();
}
答案 1 :(得分:0)
Github中有一些方便的权限检查库。
我正在使用PermissionDispatcher。看看吧。