Принудительно сканировать файлы после фотографирования - PullRequest
3 голосов
/ 24 февраля 2011

на уровне API 4 (Android 1.6), после фотографирования с использованием:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
File photo = new File(Environment.getExternalStorageDirectory(), "NewPic.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
imageUri = Uri.fromFile(photo);
startActivityForResult(intent, TAKE_PICTURE);

Я хотел бы просмотреть все миниатюры моих фотографий, но моего последнего эскиза нет.Он отлично работает на Android 2.1.

Если я подключу устройство через USB к ПК, и после завершения сканирования появится файл отключения.Так как мне начать индексирование?

Я пытался

mScanner = new MediaScannerConnection(getApplicationContext(), this);
mScanner.connect();
mScanner.scanFile(imageUri.getEncodedPath(), "*/*");

И покончим с этим:

02-24 17:13:54.678: DEBUG/MediaScannerService(1320): IMediaScannerService.scanFile: /sdcard/NewPic2222.jpg mimeType: */*
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): /sdcard volume ID: 1149784819
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): key exists

РЕДАКТОР ПОСЛЕ

У меня есть что-токак это происходит в других действиях

mCursorThumbnails = MediaStore.Images.Thumbnails.queryMiniThumbnails(mContentResolver, MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, MediaStore.Images.Thumbnails.MINI_KIND, projection);
mCursorImages = MediaStore.Images.Media.query(mContentResolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection);

Когда я проверяю счетчик первого значения, у меня есть 13 элементов, а во втором - 14. Таким образом, изображение было добавлено в mediascanner, но ОС нене сгенерирован эскиз для него.Так как мне попросить ОС создать его?

Ответы [ 4 ]

9 голосов
/ 13 февраля 2013

Когда вы добавляете файл, пусть MediaStore Content Provider узнает об этом, используя метод sendBroadcast

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(mediaFileAdded)));

Для удаление ,use:

getContentResolver().delete(uriOfMediaFileDeteled, null, null)

Основное преимущество: работа с любым типом пантомимы, поддерживаемым MediaStore

В вашем случае, сделайте это в onActivityResultMethod (т.е.) после того, как фотография была успешно сделана

6 голосов
/ 25 февраля 2011

Используйте этот код:

public static void scanFile(Context context, String path, String mimeType ) {
    Client client = new Client(path, mimeType);
    MediaScannerConnection connection =
            new MediaScannerConnection(context, client);
    client.connection = connection;
    connection.connect();
}

private static final class Client implements MediaScannerConnectionClient {
    private final String path;
    private final String mimeType;
    MediaScannerConnection connection;

    public Client(String path, String mimeType) {
        this.path = path;
        this.mimeType = mimeType;
    }

    @Override
    public void onMediaScannerConnected() {
        connection.scanFile(path, mimeType);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        connection.disconnect();
    }
}

Тогда просто позвоните scanFile(imageUri.getPath(), null).

Не используйте кодированный путь и не используйте "*/*" в качестве типа MIME, поскольку значение null позволяет сканеру автоматически определять тип MIME.

1 голос
/ 13 октября 2011

после съемки попробуйте вызвать функцию insert () из ContentResolver , передав информацию о картинке.

public final Uri insert (Uri url, ContentValues values)

Это фактически добавит изображение в базу данных и создаст для вас уменьшенное изображение.Он также будет добавлен в базу данных миниатюр.Надеюсь, это поможет!

0 голосов
/ 05 августа 2011

Используйте

MediaStore.Images.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options)

, чтобы принудительно создать эскиз для изображения.

...