在api level 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,但是OS没有为它生成缩略图。那么我该如何要求操作系统创建一个?
答案 0 :(得分:9)
每当您添加文件时,让MediaStore内容提供商使用sendBroadcast方法了解它
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(mediaFileAdded)));
对于删除,请使用:
getContentResolver().delete(uriOfMediaFileDeteled, null, null)
主要优势:使用MediaStore支持的任何mime类型
在您的情况下,在照片成功拍摄后,在onActivityResultMethod(即)中执行此操作
答案 1 :(得分: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类型,因为null
值会使扫描程序自动确定MIME类型。
答案 2 :(得分:1)
拍照后尝试调用ContentResolver的insert()函数传递有关图片的信息。
public final Uri insert (Uri url, ContentValues values)
它实际上会将图片添加到数据库并为您创建图片的缩略图。它也将添加到缩略图数据库中。希望这有帮助!
答案 3 :(得分:0)
使用
MediaStore.Images.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options)
强制创建图像的缩略图。