好吧,我真的迷路了:我有一个应用程序可以拍照(使用 Camera Intent)并将其显示在 ImageView 中。
无论我做什么,我都无法让它在模拟器中工作,它可以正常拍摄照片(在虚拟 sd 文件夹上用 adb shell 检查它:文件在那里),将它保存到虚拟 SD 卡 ...但无法读取它以便在 ImageView 中显示它,它不断抛出:
W/System.err:java.io.FileNotFoundException:/storage/0CE8-3A18/pics/IMG_XXXXXXXXXX.jpg: 打开失败:EACCES(权限被拒绝)
奇怪的是,这只发生在模拟器中,当部署在我的手机上时,它工作得很好(拍摄照片并将其显示在 ImageView 中)
我在 Linux Mint 17.2(64 位)上使用 Android Studio 1.3.2,我的 list 有:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.STORAGE" />
以及检索保存的图像并在 ImageView 上显示的代码:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Bitmap bitmap;
try {
/*************************************************
//THIS IS THE CODE THAT FAILS, ONLY IN EMULATOR
***************************************************/
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
showImg.setImageBitmap(bitmap);
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else if (resultCode == RESULT_CANCELED){
// User cancelled the image capture
} else {
// Image capture failed, advise user } }
}
}
我不知道为什么会发生这种情况,我认为这可能与模拟器的一些模糊的 Linux 权限规则或其他东西有关...任何帮助将不胜感激。
最佳答案
您可以试试这个而不是从 MediaStore 加载:
位图 = BitmapFactory.decodeFile(imageUri);
showImg.setImageBitmap(位图);
关于android - 无法在 Android 模拟器中读取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137858/