在片段中使用 MediaScannerConnection.scanFile() ?
Using MediaScannerConnection.scanFile() in a fragment?
我正在从 Fragment
中异步下载文件,并希望在下载完成时调用 MediaScannerConnection.scanFile()
。如果我坐下来等待下载完成而不离开我的 Fragment(或其托管 activity),我就能得到想要的结果。我面临的问题是 MediaScannerConnection.scanFile()
需要一个上下文,我不想限制用户停留在 Fragment
/Activity
中,这样上下文就不会为空。
如何在后台使用 MediaScannerConnection.scanFile()
以便扫描文件并在扫描完成时显示 Toast
,同时仍在我的应用程序的其他部分导航(或甚至跳出我的应用)?
这是我目前正在扫描的方式(使用上下文):
public static void mediaScanFile(Context context, String path) {
MediaScannerConnection.scanFile(context,
new String[]{path}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.d("Tag", "Scan finished. You can view the image in the gallery now.");
}
});
}
首先,从Fragment
下载一个可能很快就会被破坏的文件不是一个好主意。您应该改用前台服务。
如果您仍然想坚持使用片段,在您的情况下,您可以使用应用程序上下文。
开始下载之前,将应用程序上下文的引用存储为片段中的一个字段。
Context appContext;
// Inside onCreateView
appContext = getContext().getApplicationContext();
然后您可以使用应用程序上下文扫描媒体。
这不会导致内存泄漏,因为应用程序上下文是单个共享实例,并且在应用程序被终止之前不会被销毁。