Как обновить галерею после того, как я вставил изображение в 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())));
}
}