"ACTION_MEDIA_SCANNER_SCAN_FILE:String"已被弃用。

18
activity?.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(copyFile)))

我收到了警告

ACTION_MEDIA_SCANNER_SCAN_FILE已废弃。

在上面的代码中

是否有一个简单的替代代码?

3个回答

35

ACTION_MEDIA_SCANNER_SCAN_FILE 已被弃用!

您可以使用以下内容

Java

File file = new File(filePath);
MediaScannerConnection.scanFile(context,
                    new String[]{file.toString()},
                    null, null);

科特林

val file = File(filePath) 
MediaScannerConnection.scanFile(context, arrayOf(file.toString()),
      null, null)

这将请求媒体扫描器扫描指定路径下的文件。值得注意的是,上面的示例中scanFile()方法的第3个和第4个参数为null。但是第三个参数可以用于可选地指定文件的MIME类型,第四个参数可以用于提供监听器以便监听扫描完成事件。

有关详细信息,请参见开发人员网站

以下是不推荐使用的方法

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

2
@JorgeLeonardo 在上面的回答中,file是File对象,所以在你的情况下,它应该像以下这样: val f = File(currentPhotoPath) MediaScannerConnection.scanFile(context, arrayOf(f.toString()), arrayOf(f.getName()), null) 干杯! - Nitesh goyal
我不明白...为什么你要将 'new String[]{file.getName()}' 作为mimeTypes参数(第三个)传递?请参见此处:https://developer.android.com/reference/android/media/MediaScannerConnection#scanFile(android.content.Context,%20java.lang.String[],%20java.lang.String[],%20android.media.MediaScannerConnection.OnScanCompletedListener) - Pascal
@Niteshgoyal 好的,第三个参数是 'new String[]{file.getName()}',它不为空。第四个参数为null,但那是回调参数。 我猜这个例子应该是这样的:MediaScannerConnection.scanFile(context, new String[]{file.toString()}, null ,null); - Pascal
@Pascal 我已经更新了我的回答。 回答你的问题,第三个参数是用来指定我们提供的文件的MIME类型的。 但是这个参数是可选的,如果传递第三个参数为null,则Android将从文件扩展名推断出MIME类型。或者,如果我们想要指定MIME类型,那么可以根据文件的MIME类型进行传递。 例如:File file = new File(filePath); MediaScannerConnection.scanFile(context, new String[]{file.toString()}, new String[] { "video/*" }, null); - Nitesh goyal
@Pascal 谢谢你注意到了这个问题,我很惊讶为什么包括我自己在内,迄今为止没有人注意到它。 - Nitesh goyal
显示剩余2条评论

0

如果您正在使用Media Store API并将其传递给解析器,它将自动触发媒体扫描。以下是一个图像的示例:

val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "test.jpg")
    put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg")
    put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES) // requires API level 29
}


// this also adds it to the gallery
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接