android - 授予写入权限,但在执行时被拒绝
问题描述
我在 Manifest 中添加了对外部存储设备的写入权限,并在我的 Android 手机中授予了它们。如果它们不存在,我什至会在执行时询问它们。
但是,我总是得到这个例外:
java.io.FileNotFoundException:/storage/emulated/03b3d97bd-5186-4506-97dc-9994b7ce0761(权限被拒绝)
你知道为什么吗?
代码
try {
if (Build.VERSION.SDK_INT >= 23) {
int permissionCheck = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}
OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + image_uuid);
byte[] buffer = new byte[1024];
int bytesRead;
BitmapDrawable bitmapDrawable = (BitmapDrawable) temp.getDrawable();
etc. etc. etc.
在清单文件中:
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
解决方案
您在获得权限之前将文件写入 sd 卡。您必须使用以下代码等待授予权限的结果:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE/*1 in here*/: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted
// write file here
} else {
// permission denied
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
看这里
推荐阅读
- django - 如果 DEBUG = False,为什么 Django 不加载静态文件?
- php - Gos web socket bundle 不适用于 `symfony 4.2`
- java - Jackson throws JSONMappingException cannot be cast to java.lang.Comparable (通过引用链***)
- azure - 具有 Visual Studio 订阅的 Azure SQL Server 数据库
- powershell - 给定一个带有子目录的文件夹,我如何删除子目录中的所有内容(使用 PowerShell )除了 *.html 和 *.css
- ansible - 从多个服务器复制文件的 Ansible 脚本
- python - 在 Python 中清理 PDF 用户输入
- swift - Superview边缘的程序化自动布局约束
- python - python列表理解:从列表列表中的每个列表中列出多个项目
- laravel - 如何dd数据库中的值?