我正在尝试创建一个简单的应用程序,该应用程序可以从图库应用程序获取图像并将其显示在图像按钮上。我正在运行 Android 5.0.1 的手机上使用 API 21 进行测试。不幸的是,无论我尝试什么,我都会收到安全错误 - 即使我指定了权限。
我获取和检索图像的代码是:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode){
case PICK_IMAGE_REQUEST:
if(resultCode == RESULT_OK && imageReturnedIntent != null && imageReturnedIntent.getData() != null) {
Uri uri = imageReturnedIntent.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
// Log.d(TAG, String.valueOf(bitmap));
ImageButton ib = (ImageButton) findViewById(R.id.inputImg);
ib.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
}
当我尝试从Dropbox中选择图像时,代码有效,但当我从图库中选择图像时,我得到
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
我将READ_EXTERNAL_STORAGE的use-permission标记作为manifest的子标记:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="[REDACTED]">
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
<uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<application>
[REDACTED]
</application>
</manifest>
我在其他帖子上到处搜索,但似乎仍然无法找到为什么我仍然会得到这个讨厌的错误。
在某些设备上调试时,您需要通过转到设置来显式授予权限 -
只需替换为下面的一个并尝试,
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
问题:
您有错误
java.lang.SecurityException: Permission Denial: read com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 require android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission().
原因
由于android:maxSdkVersion=“18”
,您没有正确授予权限,根据文档。
应向应用授予此权限的最高 API 级别。如果从特定 API 级别开始不再需要应用所需的权限,则设置此属性非常有用。
只要您没有授予API 21
权限,您的应用程序就可以正常运行。
有关详细信息,请查看本主题。
解决方案< br >如果您想根据< code>API 21授予读取权限,您必须将它们声明为:
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="21" />
重要:
这只有在你需要额外权限时才有意义,因为一些旧api需要权限,而新版本不需要,所以用户体验得到了改善,因为你只在需要时才要求某些权限。
所以(在这种情况下)正确的方法是:
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
ADD ON
如果要保存数据,您必须添加< code > WRITE _ EXTERNAL _ STORAGE 权限。
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误: 03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@spli
在Android OS 4.0上运行我的应用程序并请求权限时,我遇到问题: 我总是接到电话 使用ActivityCompat检查权限。checkSelfPermission总是返回。 通过使用system dialog请求权限,它在OS 6.0上运行良好。Android操作系统4。除4.0之外,始终授予许可。OS 4.0其他权限(摄像头、日历、联系人、电话)运行正常,但导致此问题的。 也许是操作系
问题内容: 我正在尝试创建一个可以从Gallery应用程序获取图像并将其显示在imageButton上的简单应用程序。我正在运行Android 5.0.1的手机上使用API 21进行测试。不幸的是,无论我尝试什么,即使我指定了权限,我仍然会遇到安全错误。 我获取图像的代码是: 当我尝试从Dropbox选择图像时,该代码有效,但是当我从图库中选择图像时,我得到 我将READ_EXTERNAL_S
在这一点上我得到了警告: 如何让它保存文件?当我在Eclipse上创建它时,这是可行的,但是现在我更新并移到了Android Studio中,它似乎坏了一些东西。
有什么建议吗?它不工作在模拟器或当我在我的手机上运行它。
我试图更好地理解一旦Android11版本发布,我将能够做什么。 我的应用程序使用提供的图像文件路径创建相册,但使用Android11,我将无法直接访问文件。 根据Android开发人员的文档,他们最近引入了权限,但我不明白如果添加了这个权限,我是否能够继续通过访问文件。 有人有主意吗??? 谢谢 2021年1月更新 我在一个Android11虚拟设备上试用了我的应用程序,它似乎可以完美地工作,即