dar*_*enp 83
一个更简单的解决方案是使用静态便捷方法scanFile():
File imageFile = ...
MediaScannerConnection.scanFile(this, new String[] { imageFile.getPath() }, new String[] { "image/jpeg" }, null);
Run Code Online (Sandbox Code Playgroud)
this
您的活动(或任何上下文)在哪里,只有在使用非标准文件扩展名时才需要mime-type,null
而对于可选回调(仅我们不需要这么简单的情况),mime-type是必需的.
Sha*_*God 65
我对原始问题的答案以及可能存在此问题的其他任何人:
我遇到了同样的问题,我的应用程序中保存到SD卡的图像没有立即显示在他们的图库中.经过一些搜索后,我发现在我的"保存到SD卡"代码后插入了一行代码来修复问题:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
hac*_*bod 44
系统在安装时扫描SD卡以查找任何新图像(和其他)文件.如果以编程方式添加文件,则可以使用此类:
http://developer.android.com/reference/android/media/MediaScannerConnection.html
Jan*_*usz 13
您还可以通过意图将图像添加到媒体库,查看示例代码以了解它是如何完成的:
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, imageTitle);
image.put(Images.Media.DISPLAY_NAME, imageDisplayName);
image.put(Images.Media.DESCRIPTION, imageDescription);
image.put(Images.Media.DATE_ADDED, dateTaken);
image.put(Images.Media.DATE_TAKEN, dateTaken);
image.put(Images.Media.DATE_MODIFIED, dateTaken);
image.put(Images.Media.MIME_TYPE, "image/png");
image.put(Images.Media.ORIENTATION, 0);
File parent = imageFile.getParentFile();
String path = parent.toString().toLowerCase();
String name = parent.getName().toLowerCase();
image.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name);
image.put(Images.Media.SIZE, imageFile.length());
image.put(Images.Media.DATA, imageFile.getAbsolutePath());
Uri result = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Run Code Online (Sandbox Code Playgroud)
Ata*_*CSE 12
画廊刷新包括Android KITKAT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File("file://"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
else
{
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
Run Code Online (Sandbox Code Playgroud)
以下是MediaScannerConnection的代码:
MyMediaConnectorClient client = new MyMediaConnectorClient(newfile);
MediaScannerConnection scanner = new MediaScannerConnection(context, client);
client.setScanner(scanner);
scanner.connect();
Run Code Online (Sandbox Code Playgroud)
newfile是新/保存文件的File对象.
让您的活动实施'MediaScannerConnectionClient'并将其添加到您的活动中:
private void startScan()
{
if(conn!=null) conn.disconnect();
conn = new MediaScannerConnection(YourActivity.this,YourActivity.this);
conn.connect();
}
@Override
public void onMediaScannerConnected() {
try{
conn.scanFile(yourImagePath, "image/*");
} catch (java.lang.IllegalStateException e){
}
}
@Override
public void onScanCompleted(String path, Uri uri) {
conn.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这项工作与我
File file = ..... // Save file
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Run Code Online (Sandbox Code Playgroud)
File folderGIF = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/newgif2"); //path where gif will be stored
success = folderGIF.mkdir(); //make directory
String finalPath = folderGIF + "/test1.gif"; //path of file
.....
/* changes in gallery app if any changes in done*/
MediaScannerConnection.scanFile(this,
new String[]{finalPath}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
117153 次 |
最近记录: |