Как обновить галерею после того, как я вставил изображение в Android?

Я добавил добавленную в Gallery с помощью API Android как показано ниже:

Images.Media.insertImage(ctx.getContentResolver(), "scard/test.jpg", "Hello", "Описание" );

Фактически образ, который я прошел по его полному пути (scard/test.jpg), уже успешно вставлен в БД, но когда вы открываете галерею, вы не видите ее, если вы не выключаете/не включаете устройство или не устанавливаете/Отключите внешнюю память.

Это там любой способ обновить галерею по запросу?

Спасибо

Бассель Х.

Ответы

Ответ 1

Недавно я столкнулся с этой проблемой, я попробовал решение @Samuh, но не работал отлично, пока не нашел решение пример Google:

   // Tell the media scanner about the new file so that it is
    // immediately available to the user.
    MediaScannerConnection.scanFile(this,
            new String[] { file.toString() }, null,
            new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {
            Log.i("ExternalStorage", "Scanned " + path + ":");
            Log.i("ExternalStorage", "-> uri=" + uri);
        }
    });

Я пробовал себя и работал безупречно.

Или, аналогично, вы можете взглянуть на ссылку класса MediaScanner, и кто-то из StackOverflow задал этот вопрос раньше: Изображение, сохраненное на SD-карте, не отображается в приложении Галереи Android

Ответ 2

Решение с использованием Media Scanner (sendBroadcast) очень хорошо, и я использую это в своем приложении.

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

Существует другое решение после сохранения медиафайла в галерее, вы должны сообщить в базу данных галереи, что был добавлен другой файл. Это можно сделать следующим образом:

private void addImageGallery( File file ) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // setar isso
    getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}

Этот код не сохраняет ваш медиафайл в галерее, сохраняет только информацию о новом файле в базе данных галереи. Вы должны хранить реальный файл раньше.

Это решение быстрее, потому что галерея не будет полностью повторно сканироваться. Но не настолько доверчив, потому что вся информация о файле была добавлена ​​вручную.

Ответ 3

static public boolean resetExternalStorageMedia(Context context) {
    if (Environment.isExternalStorageEmulated())
        return (false);
    Uri uri = Uri.parse("file://" + Environment.getExternalStorageDirectory());
    Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED, uri);

    context.sendBroadcast(intent);
    return (true);
}

static public void notifyMediaScannerService(Context context, String path) {
    MediaScannerConnection.scanFile(context,
            new String[] { path }, null,
            new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {
            Log.i("ExternalStorage", "Scanned " + path + ":");
            Log.i("ExternalStorage", "-> uri=" + uri);
        }
    });
}

Ответ 4

Вы можете использовать это для обновления галереи Android:

public void refreshAndroidGallery(Uri fileUri) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Intent mediaScanIntent = new Intent(
                    Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            mediaScanIntent.setData(fileUri);
            mContext.sendBroadcast(mediaScanIntent);
        } else {
            mContext.sendBroadcast(new Intent(
                    Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        }
    }