问题描述
TLDR: 尽管我已经为其编写了代码,但为什么我的应用程序仍不要求运行时权限?
我正在将图像保存到存储中,通过单击按钮来执行以下操作:
// Function triggered when save button is pressed
private void saveImage(){
// Asking Runtime permissions for API level 23 and higher
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
finallySave();
} else {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},STORAGE_WRITE_REQUEST_CODE);
}
} else {
// Do not ask permissions in the runtime for API level 22 and lower
finallySave();
}
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
if (requestCode == STORAGE_WRITE_REQUEST_CODE) {
if (grantResults.size == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
finallySave()
} else {
Toast.makeText(this,"Permission denied",Toast.LENGTH_SHORT).show()
}
}
}
private void finallySave(){
try {
File outFile = new File(imagesDir,"Abc " + System.currentTimeMillis() + ".png");
FileOutputStream outputStream = new FileOutputStream(outFile);
bitmaps[0].compress(Bitmap.CompressFormat.PNG,100,outputStream);
outputStream.flush();
outputStream.close();
scanFile(outFile,"image/png");
} catch (Exception unused) {
}
}
java.io.FileNotFoundException: /storage/emulated/0/Abc/Abc 1601370822977.png (Permission denied)
我发现,当应用程序不要求运行时具有“存储写”权限时,将引发此错误。这正是我面临的问题的根源。尽管我已经为它编写了代码,但在某些情况下,我的应用程序并不要求运行时权限。复制此错误也非常困难,因为很多次保存操作都成功完成了。
我确信我保存图像的代码可以正常工作,因为有时它可以工作(这在我的应用程序要求运行时权限时发生),有时却没有。
P.S:重新安装我的应用程序后(卸载后),我遇到了这个问题。
编辑:imagesDir是我要分配的全局变量,如下所示:
imagesDir = getimageDir(); // in onCreate
private File getimageDir() {
File directory = new File(
Environment.getExternalStorageDirectory() + "/Abc");
if (!directory.exists()) {
if (!directory.mkdirs()) {
Toast.makeText(this,"Could not create directory",Toast.LENGTH_SHORT).show();
return null;
}
}
scanFile(directory,"*/*");
return directory;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)