Refresh Android mediastore using adb

I'm using adb to sync music on an android phone. Essentially, I rm the existing music directory and push replacement music files.

I'd like to be able to use adb to force a rescan, so that the google music player (and other apps) works properly with the new songs and playlists.

According to How can I refresh MediaStore on Android? you can force a rescan by broadcasting an appropriate intent.

adb provides 'shell am broadcast', which would seem to allow me to force a rescan from adb.

Alternatively I could run a rescan app or reboot, but I'd like to trigger the rescan from adb

What adb command should I issue? The music files and playlists are all in /sdcard/music.


The rescan apps use a media mount intent to kick off the media scanner. You can use am broadcast to send the same intent.

The command is:

adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard

The MEDIA_MOUNTED intent is no longer permitted (post KitKat) for non-system apps; try this instead.

It’s not recursive, though, and has to be run on the exact_file_name, so it’s not a good replacement.

adb shell am broadcast \
    -a android.intent.action.MEDIA_SCANNER_SCAN_FILE \
    -d file:///mnt/sdcard/Music/<exact_file_name>

If you need to rescan recursively, you can use this command (fix paths accordingly):

adb shell "find /mnt/sdcard/Music/ -exec am broadcast \
    -a android.intent.action.MEDIA_SCANNER_SCAN_FILE \
    -d file://{} \\;"

Or like this (if above won't work for you):

adb shell "find /mnt/sdcard/Music/ | while read f; do \
    am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE \
    -d \"file://${f}\"; done"

On some Samsung mobiles, you can get a full rescan like this:

am broadcast -a com.samsung.intent.action.MTP_FILE_SCAN -n com.android.providers.media/.MediaScannerReceiver