У меня есть приложение, с помощью которого пользователь может рисовать, а затем «экспортировать» этот чертеж в виде файла .png во внешнее хранилище, если оно есть.Генерация PNG, копирование файла на внешнее все работает как чудо, но возникает довольно уникальная проблема;после экспорта, если пользователь переходит к изображению через «Мои файлы» (в данном случае Samsung Tab с 2.2), он может видеть файл .png, но при открытии его экран черный в течение 10 секунд ... затемони видят изображение. Кроме того, изображения также не отображаются в приложении «Галерея» пользователя.
Теперь, если пользователь подключает устройство к компьютеру через USB или перезагружает устройство, он можетДоступ к изображениям без проблем из Моих файлов, и они появляются в «Галерее» с этого момента, но, опять же, все вновь экспортируемые файлы испытывают те же проблемы, пока не снова включат / выключат устройство.
Мое мышление былочто это должно быть связано с Media Scanner (по крайней мере, в случае с проблемой «Галерея», это, безусловно, так).
Итак, поскольку я нацеливаюсь на 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?
Есть идеи, как поступить?
Пол