3

在 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 将设备连接到 PC,然后在完成扫描后会出现断开文件。那么我应该如何开始索引呢?

我试过了

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

4 回答 4

9

每当您添加文件时,使用sendBroadcast方法让 MediaStore Content Provider 知道它

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

对于删除,请使用:

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

主要优势:使用 MediaStore 支持的任何 mime 类型

在您的情况下,在成功拍摄照片后在 onActivityResultMethod (即)中执行此操作

于 2013-02-13T08:56:04.997 回答
6

使用此代码:

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 类型,因为nullvalue 会使扫描仪自动确定 MIME 类型。

于 2011-02-24T21:16:42.920 回答
1

拍照后尝试调用ContentResolver的 insert() 函数,传递有关图片的信息。

public final Uri insert (Uri url, ContentValues values)

它实际上会将图片添加到数据库中并为您创建图片的缩略图。它也将被添加到缩略图数据库中。希望这可以帮助!

于 2011-10-13T01:09:32.040 回答
0

利用

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

强制为图像创建缩略图。

于 2011-08-05T10:58:17.990 回答