我有一个用户可以使用的应用程序,然后将该绘图作为 .png 文件“导出”到外部存储(如果存在)。生成PNG,将文件复制到外部都像魅力一样工作,但发生了一个相当独特的问题;导出后,如果用户通过我的文件导航到图像(在这种情况下,三星 Tab 运行 2.2),他们可以看到 .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 卡,并且失败了。三星 Tab 具有内置的非 SD 外部存储,Android 可以通过Environment.getExternalStorageDirectory()
. 我如何告诉它扫描非 SD 存储?
任何想法如何进行?
保罗