ユーザーが描画できるアプリがあり、その描画を .png ファイルとして外部ストレージ (存在する場合) に「エクスポート」します。PNG の生成、ファイルの外部へのコピーはすべて魔法のように機能しますが、かなりユニークな問題が発生します。エクスポート後、ユーザーがマイ ファイル (この場合は 2.2 を実行している Samsung タブ) を介して画像に移動すると、.png ファイルが表示されますが、開くと画面が約 10 秒間真っ暗になります... その後さらに、画像はユーザーの「ギャラリー」アプリにも表示されません。
これで、ユーザーがデバイスを USB 経由でコンピューターに接続するか、デバイスを再起動すると、マイ ファイルから問題なく画像にアクセスでき、その時点から [ギャラリー] に表示されますが、新しくエスポートされたファイルはすべて経験します。デバイスを再度サイクル/接続するまで、同じ問題が発生します。
私の考えでは、これはメディア スキャナーに関連している必要があると考えていました (少なくとも「ギャラリー」の問題の場合は、間違いなくそうです)。
そのため、Api 8 以降をターゲットにしているため、静的MediaScannerConnection.scanFile()
メソッドを使用して OS を再スキャンし、画像をギャラリーに追加するなどを試みています。また、これにより、画像を開く際の奇妙な遅延の問題が解決されることを願っています。これが私のコードです:
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 ストレージをスキャンするように指示するにはどうすればよいですか?
続行する方法はありますか?
ポール