我正在尝试将/mnt/sdcard/image.jpg中的图像文件读入我的ImageView。这是我的代码:
Bitmap bmp = BitmapFactory.decodeFile("/mnt/sdcard/image.jpg");
webImage.setImageBitmap(bmp);
我已经写了外部存储权限。
我的代码说bmp为空,即使图像位于根目录中(我转到I Drive并且image.jpg就在那里。)
我做错了什么?
答案 0 :(得分:2)
可能有两种情况:
1)如果您的图像位于SD卡的根文件夹中,则可以通过
访问它 Environment.getExternalStorageDirectory().toString + File.separator + "yourimage.jpg"
2)但我想你的情况是在/ mnt / sdcard / external_sd中你的设备的存储卡在这种情况下试试这个:
Environment.getExternalStorageDirectory().toString + File.separator + "external_sd" + File.separator + "yourimage.jpg"
在BitmapFactory.decodeFile("Replace Here...")
答案 1 :(得分:1)
我怀疑带有图像的卡未安装在/ mnt / sdcard /.
下由于您使用的是摩托罗拉设备,因此您可能有两个大容量存储设备(请参阅this list,如果您的设备在那里,就是这种情况)。在这种情况下,您必须使用Motorola "External" Storage API来获取第二个大容量存储的路径。
一般情况下:您不能依赖这样的SD卡的硬编码路径。安装点因设备而异。或者可能以不同的名称命名,某些设备可能有闪存而不是卡,依此类推。简而言之:在您的手机上有效的功能打破其他人。您可以通过调用Environment.getExternalStorageDirectory()
来读取主要外部存储的可靠路径。
答案 2 :(得分:1)
谢谢,我设法解决了。这是我发现的:
我查看了LogCat并没有收到任何错误,但是,保存到其他系统区域(例如/Android/Data/
)会导致FileNotFoundException
- 权限错误。
File destination = new File(Environment.getExternalStorageDirectory(), "image" +
DateHelper.getTodaysDate() + "_" + DateHelper.getCurrentTime() + ".jpg");
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Add extra to save full-image somewhere
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(destination));
startActivityForResult(intent, REQUEST_IMAGE);
}
};
答案 3 :(得分:0)
请检查LogCat以获取更多信息。
我的猜测是你有三星设备。三星往往有一个external_sd文件夹,因此您可能已将其添加到错误的SD卡中,因为三星通常有内部和外部。
答案 4 :(得分:0)
你的代码完全没问题。只需检查您是否正在编写正确的SD卡路径。可能因为这个原因你得到了空位图。
并且“写入外部存储权限”用于写入您的SD卡而不是用于从SD卡读取。明确这个概念。