【发布时间】:2016-09-26 00:13:57
【问题描述】:
在模拟器中(我使用 genymotion)它工作正常,但是当我在真实设备上运行它时(我的手机是华硕 ZenFone Laser 5.0)会抛出一个 filenotfoundexception
java.io.FileNotFoundException:/storage/emulated/0/cam20160926_075819.jpg:打开失败:EACCES(权限被拒绝)
imgBitmap = MediaStore.Images.Media.getBitmap(cr, selectedImage);
这是 onActivityResult() 的方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case CAMERA_REQUEST:
if (resultCode == Activity.RESULT_OK){
Uri selectedImage = imageUri;
getActivity().getContentResolver().notifyChange(selectedImage, null);
ContentResolver cr = getActivity().getContentResolver();
Bitmap imgBitmap;
try {
imgBitmap = MediaStore.Images.Media.getBitmap(cr, selectedImage);
accountPhoto.setImageBitmap(imgBitmap);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getActivity().getApplicationContext(), "Something went wrong while taking a photo", Toast.LENGTH_LONG).show();
Log.e("Camera", e.toString());
}
}
}
}
我阅读了有关此 EACCES 的一些相关问题和解决方案,看来问题是在我的许可下:
<uses-feature android:name="android.hardware.camera2" android:required="true"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我错过了什么吗?感谢回复
【问题讨论】:
-
你用的是哪个版本的SDK和android?
-
我现在在棉花糖 6.0 中 api lvl 23。我的应用程序的最小 sdk 版本是 api lvl 18
-
所以我在这里看不到您关于读写外部存储的权限请求?
-
什么?我不明白你在说什么
-
什么是 imageUri?我认为它是空的。请尝试在函数中使用参数数据,并在使用前先检查它是否为空。使用
Uri selectedImage = data.getData();。详情见stackoverflow.com/a/23868051/5241603