我有一个用户可以使用的应用程序,然后将该图形作为.png文件“导出”到外部存储器(如果存在)。生成PNG,将文件复制到外部所有工作就像一个魅力,但一个相当独特的问题发生;导出后,如果用户通过我的文件导航到图像(在这种情况下运行2.2的Samsung Tab),他们可以看到.png文件,但是当他们打开它时,屏幕是黑色大约10秒......然后他们看到图像,此外,图像也没有显示在用户的“图库”应用程序中。
现在,如果用户通过USB将设备连接到计算机,或重新启动设备,他们可以从我的文件中访问图像没有问题,从那时起它们就会出现在“图库”中,但是再次,任何新的esported文件遇到相同的问题,直到他们再次循环/连接设备。
我的想法是,这必须与媒体扫描仪有关(至少在'画廊'问题的情况下,它肯定是)。
所以,因为我正在针对Api 8+,我正在尝试使用静态MediaScannerConnection.scanFile()
方法让操作系统重新扫描并将我的图像添加到图库等等。同时希望这可以解决问题打开图像的奇怪延迟。这是我的代码:
MediaScannerConnection.scanFile(
context,
new String[] { "/mnt/sdcard/MyApp" },
null,
null
);
LogCat在导出图像时给出了以下条目,从而运行上述调用:
DEBUG/MediaScannerService(2567): IMediaScannerService.scanFile: /mnt/sdcard/MyApp mimeType: null
DEBUG/MediaScannerService(2567): onStartCommand : intent - Intent { cmp=com.android.providers.media/.MediaScannerService (has extras) }
DEBUG/MediaScannerService(2567): onStartCommand : flags [0], startId [1]
DEBUG/MediaScannerService(2567): ServiceHandler:handleMessage volume[null], filePath[/mnt/sdcard/MyApp]
DEBUG/MediaProvider(2567): getSdSerial() sd state = removed
INFO/Database(2567): sqlite returned: error code = 17, msg = prepared statement aborts at 43: [SELECT DISTINCT sd_serial FROM images WHERE sd_serial LIKE 'external_0x%']
ERROR/MediaProvider(2567): removeMediaDBData called
DEBUG/MediaScanner(2567): prescan enter: path - /mnt/sdcard/MyApp
DEBUG/MediaScanner(2567): prescan return
因此,看起来MediaScanner正在获取正确的位置,但无法找到SD卡,这是正确的,并且失败了。 Samsung Tab具有内置的非SD外部存储,Android可通过Environment.getExternalStorageDirectory()
访问。如何告诉它扫描非SD存储?
任何想法如何进行?
保
答案 0 :(得分:3)
在此找到解决方案,包括通过Intent:
向媒体扫描器发送广播请求How to update the Android media database
从未弄清MediaScannerConnection.scanFile
的问题。
答案 1 :(得分:0)
每当添加文件时,让MediaStore内容提供商使用
了解它sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAddedOrDeleted)));
主要优势:使用MediaStore支持的任何mime类型
对于删除:只需使用getContentResolver()。delete(uri,null,null)