扫描Android SD卡以获取新文件
作者:互联网
我的应用程序允许用户将图像保存到SD卡.但是我不知道如何卸下并重新安装SD卡之前如何让它出现在画廊中.我已经用Google搜索了几天这个问题,但我不确定如何让它自动出现.我发现
this链接,但我不知道如何使用该类.这是我用来保存文件.在try catch块的底部是我想要扫描sd卡以获取新媒体的地方.
FileOutputStream outStream = null;
File file = new File(dirPath, fileName);
try {
outStream = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
outStream.flush();
outStream.close();
} catch {
...
}
如果有人能指出我正确的方向,我将不胜感激.
解决方法:
我尝试了很多不同的方法来触发MediaScanner,这些都是我的结果.
SendBroadcast
最简单,最天真的解决方案.它包括从您的代码执行以下指令:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
但是,由于缺少必要的权限,这在KitKat设备中不再有效.
MediaScannerWrapper
发布here(根据@ Brian的回答),它包含一个MediaScannerConnection实例,以便在特定目录上触发scan()方法.事实证明这种方法在4.3及以下版本中工作正常,但KitKat(4.4)仍然没有运气.
FileWalker
尝试克服MediaStore缺乏更新数据库承诺的众多Play商店应用程序之一是ReScan SD.它发送了许多不同的广播:
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file://" + Environment.getExternalStorageDirectory())));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable/SD")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable/MicroSD")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///mnt/Removable/MicroSD")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///mnt")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///storage")));
sendBroadcast(new Intent("android.intent.action.MEDIA_MOUNTED", Uri.parse("file:///Removable")));
并尝试通过在基本目录的每个文件上手动触发scan()方法来支持KitKat.不幸的是,这是非常耗费CPU和耗时的,因此不太推荐.
“贝壳方式”
在某些情况下,唯一可以与KitKat一起使用的是通过adb shell发送广播.因此,此代码段允许您以编程方式执行此操作:
Runtime.getRuntime().exec("am broadcast -a android.intent.action.MEDIA_MOUNTED -d file://" + Environment.getExternalStorageDirectory());
它更像是一种黑客行为方式,但目前是我能想到的最好的方式.
底线
上述每个解决方案实际上适用于所有不是KitKat的解决方案.这是因为,由于Justin,已经找到了一个错误并发布到了official Tracker.这意味着,在错误解决之前,我们没有真正的KitKat支持.
哪一个使用?其中,我将使用MediaScannerWrapper解决方案以及shell-ish方法(最后一个).
标签:android,sd-card,media,android-mediascanner 来源: https://codeday.me/bug/20190917/1810079.html