Изображение, сохраненное на SDCard, не отображается в приложении «Галерея» Android. - PullRequest
83 голосов
/ 31 января 2010

Я сохраняю изображение на SD-карте, и оно не появляется в приложении «Галерея», пока я не сниму SD-карту и не верну ее обратно.

У вас есть идеи, почему это так?

Похоже, что приложение Галерея имеет некоторый кеш, который не обновляется при сохранении файла ...

На самом деле, я также хочу открыть только что сохраненное изображение в приложении "Галерея", но у меня ничего не вышло.
это - мой вопрос об этой проблеме.

Ответы [ 15 ]

3 голосов
/ 14 марта 2014
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

Кажется, не работает на KITKAT. Выдает исключение об отказе в разрешении и вылетает приложение. Для этого я сделал следующее:

String path = mediaStorageDir.getPath() + File.separator
                    + "IMG_Some_name.jpg";
CameraActivity.this.sendBroadcast(new Intent(
                             Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri
                            .parse("file://" + path)));

Надеюсь, это поможет.

3 голосов
/ 29 августа 2013

Здесь я делюсь кодом, который может загрузить изображение в виде растрового изображения и сохранить его в галерее SDCard в папке с именем приложения. Вы должны выполнить следующие шаги

  1. Сначала загрузите растровое изображение



     private Bitmap loadBitmap(String url) {
        try {
            InputStream in = new java.net.URL(url).openStream();
            return BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
       }


  1. Пожалуйста, предоставьте следующее разрешение в вашем файле AndroidManifest.xml.


    uses-permission android:name="android.permission.INTERNET" 
    uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"


  1. Вот весь код, написанный в Activty, в котором мы хотим выполнить эту задачу.



     void saveMyImage(String appName, String imageUrl, String imageName) {

            Bitmap bmImg = loadBitmap(imageUrl);
            File filename;
            try {
                String path1 = android.os.Environment.getExternalStorageDirectory()
                        .toString();
                File file = new File(path1 + "/" + appName);
                if (!file.exists())
                    file.mkdirs();
                filename = new File(file.getAbsolutePath() + "/" + imageName
                        + ".jpg");
                FileOutputStream out = new FileOutputStream(filename);
                bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
                out.flush();
                out.close();
                ContentValues image = new ContentValues();
                image.put(Images.Media.TITLE, appName);
                image.put(Images.Media.DISPLAY_NAME, imageName);
                image.put(Images.Media.DESCRIPTION, "App Image");
                image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
                image.put(Images.Media.MIME_TYPE, "image/jpg");
                image.put(Images.Media.ORIENTATION, 0);
                File parent = filename.getParentFile();
                image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
                        .toLowerCase().hashCode());
                image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
                        .toLowerCase());
                image.put(Images.Media.SIZE, filename.length());
                image.put(Images.Media.DATA, filename.getAbsolutePath());
                Uri result = getContentResolver().insert(
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
                Toast.makeText(getApplicationContext(),
                        "File is Saved in  " + filename, Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }


  1. Надеюсь, что это может решить всю вашу проблему.
2 голосов
/ 04 октября 2012

Используйте это после сохранения изображения

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
2 голосов
/ 12 января 2012

Мой код для MyMediaConnectorClient:

public class MyMediaConnectorClient implements MediaScannerConnectionClient {

    String _fisier;
    MediaScannerConnection MEDIA_SCANNER_CONNECTION;

    public MyMediaConnectorClient(String nume) {
        _fisier = nume;
    }

    public void setScanner(MediaScannerConnection msc){
        MEDIA_SCANNER_CONNECTION = msc;
    }

    @Override
    public void onMediaScannerConnected() {
        MEDIA_SCANNER_CONNECTION.scanFile(_fisier, null);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        if(path.equals(_fisier))
            MEDIA_SCANNER_CONNECTION.disconnect();
    }
}
0 голосов
/ 22 февраля 2018

Вам необходимо дать разрешения приложению Галерея. Просто нажмите и удерживайте значок приложения галереи на главном экране и нажмите «ИНФОРМАЦИЯ О ПРИЛОЖЕНИИ», которая появляется в верхней части экрана. Это покажет настройки приложения галереи. Теперь перейдите на вкладку Permissions и включите хранилище, разрешения камеры, переключив его. Теперь перейдите в родное приложение галереи, и вы получите сохраненные изображения.

...