再起動せずにMediaStoreに最新の情報があることを確認したいので、SOで見つけた一般的な方法を使用してMediaScannerをトリガーしたいと思います。
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
これは、Samsung S2 w / ICSでは正常に機能しますが、Nexus 7 w/JellyBeanでは機能しません。Logcatは私のNexus7でこれを示しています:
WARN/ActivityManager(480): Permission denied: checkComponentPermission() owningUid=10014
WARN/BroadcastQueue(480): Permission Denial: broadcasting Intent { act=android.intent.action.MEDIA_MOUNTED dat=file:///storage/emulated/0 flg=0x10 } from com.example.foo.bar (pid=17488, uid=10046) is not exported from uid 10014 due to receiver com.android.providers.downloads/.DownloadReceiver
INFO/ActivityManager(480): Start proc com.google.android.music:main for broadcast com.google.android.music/.store.MediaStoreImportService$Receiver: pid=17858 uid=10038 gids={50038, 3003, 1015, 1028}
INFO/MusicStore(17858): Database version: 50
INFO/MediaStoreImporter(17858): Update: incremental Added music: 0 Updated music: 0 Deleted music: 0 Created playlists: 0 Updated playlists: 0 Deleted playlists: 0 Inserted playlist items: 0 Deleted playlist items: 0 Removed orphaned playlist items: 0
最後の行は理論的には有望に聞こえますが、新しいファイルがSDカードにプッシュされた後でも(adb pushを介して)値は常に0です。私の古いデバイス(S2)では、SDカードを再マウントします。
AndroidManifest.xmlに次のアクセス許可を追加しましたが、これらのアクセス許可がない場合と同じように動作します。
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
アイデア/代替案はありますか?
編集1:
新規または変更または削除されたファイルのファイルパスがわからないことに注意してください。MediaStoreが最新であることを確認したいだけです。