下载图像并将其存储在android中的Gallery应用程序中

时间:2016-03-16 17:25:03

标签: android mediastore android-download-manager

我想在图库中保存图像文件,以便可以从图库应用程序中查看图像。

但我想要的是创建一个单独的目录,就像我们在我们的图库应用程序中使用whatsapp Images等应用程序一样。

到目前为止,我已编写此代码以下载图像

public void createDir(){
  File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), DIR_NAME);
    Log.d(LOG_TAG, "dir pictr :" + dir.toString());
    if (!dir.exists()) {
        dir.mkdir();
        Log.d(LOG_TAG, "dir not exists and created first time");
    } else {
        Log.d(LOG_TAG, "dir exists");
    }
}

上面的代码在gallery dir中创建了目录

Uri imageLink = Uri.parse(downloadUrlOfImage);  // this is download link like www.com/abc.jpg

CreateDir();
DownloadManager.Request request = new DownloadManager.Request(imageLink);

File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), DIR_NAME);
String absPath = dir.getAbsoultePath();
request.setDestinationUri(Uri.parse(absPath + "image.jpg"));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

DownloadManager dm = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);

但是这给我的错误为java.lang.IllegalArgumentException: Not a file URI: /storage/sdcard0/Pictures/FreeWee/1458148582.jpg

基本上我想要的是保存图像,并且该图像必须显示在我命名的某个目录下的图库应用程序中。

如果不理解,请询问,以便我可以改进我的问题。 我该如何进一步处理?

1 个答案:

答案 0 :(得分:4)

正如@RoyFalk指出你的代码中有2个问题。

所以你可以使用这段代码

String filename = "filename.jpg";
String downloadUrlOfImage = "YOUR_LINK_THAT_POINTS_IMG_ON_WEBSITE";
    File direct =
            new File(Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
                    .getAbsolutePath() + "/" + DIR_NAME + "/");


    if (!direct.exists()) {
        direct.mkdir();
        Log.d(LOG_TAG, "dir created for first time");
    }

    DownloadManager dm = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE);
    Uri downloadUri = Uri.parse(downloadUrlOfImage);
    DownloadManager.Request request = new DownloadManager.Request(downloadUri);
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
            .setAllowedOverRoaming(false)
            .setTitle(filename)
            .setMimeType("image/jpeg")
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            .setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES,
                    File.separator + DIR_NAME + File.separator + filename);

    dm.enqueue(request);

您将在DIR_NAME下的图库应用中看到图片。 希望这会对你有所帮助。