我想将已拍摄的照片添加到MediaStore中,以便图库应用程序可以找到它们(无需重新启动设备)。 应用程序的最小SDK版本是9。任何帮助、博客或文档都将不胜感激。
我想将已拍摄的照片添加到MediaStore中,以便图库应用程序可以找到它们(无需重新启动设备)。 应用程序的最小SDK版本是9。任何帮助、博客或文档都将不胜感激。
在大多数设备上,你只需要等一段时间,新的照片就会自动检测到。
如果你想立即刷新相册,你需要使用MediaScanner类,它将刷新相册 - 删除已删除的照片,添加新的照片等等...
public void refreshGallery() {
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
String newPhotoPath = "file:" + image.getAbsolutePath(); // image is the created file image
File file = new File(newPhotoPath);
Uri contentUri = Uri.fromFile(file);
scanIntent.setData(contentUri);
sendBroadcast(scanIntent);
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
// 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);
}
});
好的,这是我的代码,它对我有效。它会返回所有我在Android图库中看到的图片,只需从此行调用此函数即可。
getallimages(Environment.getExternalStorageDirectory());
我的函数如下所示
private void getallimages(File dir)
{
String[] STAR = { "*" };
final String orderBy = MediaStore.Images.Media.DEFAULT_SORT_ORDER;
Cursor imagecursor = cntx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, STAR, null, null, orderBy);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
int count = imagecursor.getCount();
for (int i = 0; i < count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
ImageItem imageItem = new ImageItem();
if(new File(imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA))).length()<=10485760)
{
imageItem.filePath = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA));
imageItem.id = id;
imageItem.selection = false; //newly added item will be selected by default
controller.images.add(imageItem);
}
}
}
您可以要求MediaScanner按需扫描特定文件,例如您的图像文件。这应该比仅要求MediaScanner扫描所有新文件产生更少的开销。
ACTION_MEDIA_SCANNER_SCAN_FILE
替换ACTION_MEDIA_MOUNTED
解决了问题。请编辑您的答案以便我接受它作为正确答案! - Ali Behzadian Nejad