Search code examples
androidimageioandroid-gallery

notify image moved to another folder


I am a beginner android programmer. I create a project for hiding image. But, I have a problem in my project. Is that: I use a method to move a photo from the folder A to folder .B(Here is how I hid it from image gallery) . I am sure that the picture in the folder A was deleted and moved to folder .B. However, when I open image gallery application I still see this picture is displayed at the folder A.

This is method copy picture to folder .B:

    public static String copyFile(String path) {
        //TO DO: create folder .B

        File pathFrom = new File(path);
        File pathTo = new File(Environment.getExternalStorageDirectory() + "/.B");
        File file = new File(pathTo, fileToName);

        while (file.exists()) {
            fileToName = String.valueOf(System.currentTimeMillis());
            file = new File(pathTo, fileToName);
        }

        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(pathFrom);
            out = new FileOutputStream(file);

            byte[] data = new byte[in.available()];
            in.read(data);
            out.write(data);
            in.close();
            out.close();

            return file.getPath();
        } catch (FileNotFoundException e) {
            Log.e(TAG, e.getMessage());
            return "error:" + e.getMessage();
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
            return "error:" + e.getMessage();
        }
    }

After copy picture to folder .B, I delete this picture in folder A:

new File(path).delete();

So Is there any suggestion for notify for all image gallery know that this picture was moved to another folder or another URI?

**UPDATE: The suggestion for me work fine is: Before 4.4,you can call this:

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

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));

//the file is new image's path

THank FireSun and everyonce


Solution

  • After change imgae path,you should notify the gallery to update,so you should send a broadcast to make it.
    Before 4.4,you can call this:

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

    After 4.4,try this:

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));
    //the file is new image's path