在我的应用中,用户可以从SD卡中选择图像并设置为个人资料图片。一切正常,但是当用户从sdcard图像中选择whatsapp文件夹中的图像时,无法解码。
我正在使用以下代码解码文件并在ImageView中显示。
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile
.getAbsolutePath());
imgProfilePic.setImageBitmap(myBitmap);
myBitmap = null;
System.gc();
Runtime.getRuntime().gc();
}
我正在选择图像路径/storage/sdcard0/WhatsApp/Media/WhatsApp Images/IMG-20130804-WA0000.jpg
并且它存在于sdcard中,但file.exists
始终返回false。
如果用户从其他文件夹而不是whatsapp中选择图像,它可以正常工作。
更新
我正在执行
之类的步骤1. click on profilepic(imageview).
2. select options(from camera,galerry,or edit)
3. open selected or captured image in CropImage Activity.
4. display cropped image.
Anyhelp将不胜感激。谢谢。
答案 0 :(得分:2)
我正在修改其他应用的图像。我想这可能是问题所在。那我做了什么?
onActivityResult()
private void copyFile(File sourceFile, File destFile) throws IOException {
if (!sourceFile.exists()) {
return;
}
FileChannel source = null;
FileChannel destination = null;
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
if (destination != null && source != null) {
destination.transferFrom(source, 0, source.size());
}
if (source != null) {
source.close();
}
if (destination != null) {
destination.close();
}
}
希望这可以帮助别人。
答案 1 :(得分:1)
如果你的ImageFile.exists()
方法在android中提供false
,但它存在于内存中,那么你肯定没有在你的项目的Write-external-storage
文件中给出Manifest
权限。在项目清单中添加此权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />