如何在android gallery中打开保存在内部存储(Android / data /%package%/ cache中的缓存文件夹)中的图像

时间:2015-11-06 03:55:27

标签: android caching android-image android-gallery android-file

下载图像后,我将其保存在

的内部存储中

Android / data /%packagename%/ cache目录。下面是代码。

private class SaveImageToStorage extends AsyncTask<Void,Void,Void>
{
    String picName;
    Bitmap bitmap;
    public SaveImageToStorage(String name, Bitmap bitmap)
    {
        this.picName = name;
        this.bitmap = bitmap;
    }

    @Override
    protected Void doInBackground(Void... params) {
        if(bitmap != null && !picName.isEmpty()) {
            File file = new File(feedImagesCacheDir.getPath(), extractImageNameFromUrl(picName));
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.WEBP, 80, fos);
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

毕竟,我只是想在android gallery中打开图片。

我尝试下面的代码,它没有工作。它告诉我Toast&#34;无法找到图像&#34;。

所以我尝试删除&#34;文件://&#34;然后它打开图库,只有像破碎的图像图标一样。

private void openImageInGallery(){
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://"+getFeedImagesCacheDir().getPath() + "/" + imgName+".webp"), "image/*");
    startActivity(intent);
}

我想也许我将它保存在缓存文件夹中,因此它变为私有,只能访问我的应用程序。

我该如何解决这个问题?

谢谢。感谢我的坏ENG。

2 个答案:

答案 0 :(得分:1)

高速缓存图像不能直接查看,因为保存为加密格式,因此首先下载该图像并保存到SD卡中。使用下面的代码。

String root = Environment.getExternalStorageDirectory().toString();
String wallpaperFilePath=Android/data/%packagename%/cache/imagename;
File cacheDir = GlobalClass.instance().getCacheFolder(this);
File cacheFile = new File(cacheDir, wallpaperFilePath);
InputStream fileInputStream = new FileInputStream(cacheFile);
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inSampleSize = scale;
bitmapOptions.inJustDecodeBounds = false;
Bitmap wallpaperBitmap = BitmapFactory.decodeStream(fileInputStream, null, bitmapOptions);


File myDir = new File(root + "/saved_images");    
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-"+ n +".jpg";
File file = new File (myDir, fname);
if (file.exists ()) file.delete (); 
try {
       FileOutputStream out = new FileOutputStream(file);
       wallpaperBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
       out.flush();
       out.close();

} catch (Exception e) {
       e.printStackTrace();
}

并在清单

中添加此内容
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

通过使用此行,您可以在图库视图中查看已保存的图像。

sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
        Uri.parse("file://" + Environment.getExternalStorageDirectory())));

答案 1 :(得分:0)

您可以将图像下载到DCIM(sdCard中的图库文件夹)。 然后使用下面打开图库:

public static final int RESULT_GALLERY = 0;
Intent galleryIntent = new Intent(
                    Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent , RESULT_GALLERY );

如果你想获得结果URI或做任何其他事情,请使用:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case QuestionEntryView.RESULT_GALLERY :
        if (null != data) {
            imageUri = data.getData();
            //Do whatever that you desire here. or leave this blank

        }
        break;
    default:
        break;
    }
}

希望这有帮助!