gpt4 book ai didi

android - 在特定路径(文件夹)上触发 mediascanner,如何?

转载 作者:可可西里 更新时间:2023-11-01 18:49:16 33 4
gpt4 key购买 nike

我得到了这门课:

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.util.Log;

public class MediaScannerWrapper implements
MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mConnection;
private String mPath;
private String mMimeType;


// filePath - where to scan;
// mime type of media to scan i.e. "image/jpeg".
// use "*/*" for any media
public MediaScannerWrapper(Context ctx, String filePath, String mime){
mPath = "/sdcard/DCIM/Camera";
mMimeType = "jpg";
mConnection = new MediaScannerConnection(ctx, this);
}

// do the scanning
public void scan() {
mConnection.connect();
}

// start the scan when scanner is ready
public void onMediaScannerConnected() {
mConnection.scanFile(mPath, mMimeType);
Log.w("MediaScannerWrapper", "media file scanned: " + mPath);
}

public void onScanCompleted(String path, Uri uri) {
// when scan is completes, update media file tags
}
}

如何在其他类中使用它?我不知道如何正确使用类,我尝试过但没有任何效果。我做错了什么,但我不知道是什么,有人可以帮我解决这个问题。

最佳答案

故事

在 Android 4.4 之前,我们可以只发送一个广播来触发任何特定文件、文件夹甚至存储根目录上的媒体扫描器。但是从 4.​​4 KitKat 开始,Android 开发者已经修复了这个问题。

为什么我说是固定的?原因很简单。在根目录上使用 MEDIA_MOUNTED 发送广播非常昂贵。运行媒体扫描器是一项昂贵的操作,当用户在存储和深层文件夹结构中获得大量文件时,情况会变得更糟。

Android 4.4 之前

保持简单明了。如果您的目标应用是 Android 4.4 之前的版本。但请记住,除非绝对必要,否则不要在根目录上使用它。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

来自安卓 4.4

有两种方法供您选择。

i) 第一个与前面的示例非常相似,但可能工作效率不高,也不推荐。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

ii) 现在,让我们继续讨论针对此问题的最受推荐和最有效的解决方案。

在一个String类型的ArrayList中添加已经更新的文件的文件路径,像这样

ArrayList<String> toBeScanned = new ArrayList<String>();
toBeScanned.add(item.getFilePath());

现在您需要运行 MediaScannerConnection 类的 scanFile() 静态方法并传递包含已更新且需要进行媒体扫描的所有文件列表的字符串数组。

您还可以设置一个监听器,以便在对单个文件的扫描完成后做出响应。

String[] toBeScannedStr = new String[toBeScanned.size()];
toBeScannedStr = toBeScanned.toArray(toBeScannedStr);

MediaScannerConnection.scanFile(getActivity(), toBeScannedStr, null, new OnScanCompletedListener() {

@Override
public void onScanCompleted(String path, Uri uri) {
System.out.println("SCAN COMPLETED: " + path);

}
});

关于android - 在特定路径(文件夹)上触发 mediascanner,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414955/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com