繁体   English   中英

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

[英]How can I open images that save in internal storage (cache folder in Android/data/%package%/cache) in android gallery

下载图像后,我将其保存在内部存储器中

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“找不到图像”。

因此,我尝试删除“ file://”,然后打开画廊,但只剩下损坏的图像图标。

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。

无法直接查看“缓存图像”,因为它像加密格式一样保存,因此首先下载该图像并保存到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())));

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

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;
    }
}

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM