在重新启动手机之前,我无法在图库中看到下载图像

时间:2015-06-09 21:30:06

标签: java android

当我下载图像并将其保存到Android设备时,图像不会出现在图库中,稍后手机重新启动后图像会显示在图库中。

以下是我下载图像并将其保存到设备的代码:

private void downloadImage() {
        if (future != null) {
            //set the callback and start downloading
            future.withResponse().setCallback(new FutureCallback<Response<InputStream>>() {
                @Override
                public void onCompleted(Exception e, Response<InputStream> result) {
                    boolean success = false;
                    if (e == null && result != null && result.getResult() != null) {
                        try {
                            //prepare the file name
                            String url = mSelectedImage.getUrl();
                            String fileName = url.substring(url.lastIndexOf('/') + 1, url.length());
                            //create a temporary directory within the cache folder
                            File dir = Utils.getAlbumStorageDir("wall-tumbler");
                            //create the file
                            File file = new File(dir, fileName);
                            if (!file.exists()) {
                                file.createNewFile();
                            }

                            //copy the image onto this file
                            Utils.copyInputStreamToFile(result.getResult(), file);

                            //animate the first elements
                            animateCompleteFirst(true);

                            success = true;
                        } catch (Exception ex) {
                            Log.e("walltumbler", ex.toString());
                        }

                        //animate after complete
                        animateComplete(success);
                    } else {
                        animateReset(true);
                    }
                }
            });
        }
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void downloadAndSetOrShareImage(final boolean set) {
        if (future != null) {
            //set the callback and start downloading
            future.withResponse().setCallback(new FutureCallback<Response<InputStream>>() {
                @Override
                public void onCompleted(Exception e, Response<InputStream> result) {
                    boolean success = false;
                    if (e == null && result != null && result.getResult() != null) {
                        try {
                            //create a temporary directory within the cache folder
                            File dir = new File(DetailActivity.this.getCacheDir() + "/images");
                            if (!dir.exists()) {
                                dir.mkdirs();
                            }

                            //create the file
                            File file = new File(dir, "walltumbler.jpg");
                            if (!file.exists()) {
                                file.createNewFile();
                            }

                            //copy the image onto this file
                            Utils.copyInputStreamToFile(result.getResult(), file);

                            //get the contentUri for this file and start the intent
                            Uri contentUri = FileProvider.getUriForFile(DetailActivity.this, "com.mikepenz.fileprovider", file);

                            if (set) {
                                //get crop intent
                                Intent intent = WallpaperManager.getInstance(DetailActivity.this).getCropAndSetWallpaperIntent(contentUri);
                                //start activity for result so we can animate if we finish
                                DetailActivity.this.startActivityForResult(intent, ACTIVITY_CROP);
                            } else {
                                //share :D
                                Intent shareIntent = new Intent(Intent.ACTION_SEND);
                                shareIntent.setData(contentUri);
                                shareIntent.setType("image/jpg");
                                shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
                                //start activity for result so we can animate if we finish
                                DetailActivity.this.startActivityForResult(Intent.createChooser(shareIntent, "Share Via"), ACTIVITY_SHARE);
                            }

                            success = true;
                        } catch (Exception ex) {
                            Log.e("walltumbler", ex.toString());
                        }

                        //animate after complete
                        animateComplete(success);
                    } else {
                        animateReset(true);
                    }
                }
            });
        }
    }

的Utils

/**
     * http://developer.android.com/training/basics/data-storage/files.html
     *
     * @param albumName
     * @return
     */

    public static File getAlbumStorageDir(String albumName) {
        // Get the directory for the user's public pictures directory.
        boolean success = false;
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
        if (!file.exists()) {
            success = file.mkdir();
        }
        if (!success)
            Log.i("wall-tumbler", "Directory not created");
        else
            Log.i("wall-tumbler", "Directory created");
        return file;
    }
    /**
     * http://developer.android.com/training/basics/data-storage/files.html
     *
     * @return
     */
    public static boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }
}

截图  http://i.stack.imgur.com/6dkp0.jpg

1 个答案:

答案 0 :(得分:0)

您应该使用MediaStore内容提供商将图像添加到图库。

ContentValues values = new ContentValues();
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATA, imagePath);
context.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);