2013-07-29 50 views
34

我正在使用adb在android手机上同步音乐。基本上,我现有的音乐目录并推送替代音乐文件。使用adb刷新Android媒体库

我希望能够使用adb强制重新扫描,以便Google音乐播放器(和其他应用程序)能够与新歌曲和播放列表一起正常工作。

根据How can I refresh MediaStore on Android?,您可以通过广播适当的意图强制重新扫描。

adb提供'shell am broadcast',这似乎允许我强制从adb重新扫描。

我也可以运行一个应用程序重新扫描或重新启动,但我想,以触发来自亚行

我应该发出什么ADB命令重新扫描?音乐文件和播放列表都在/ sdcard /音乐中。

回答

51

重新扫描应用程序使用媒体装载意图启动媒体扫描仪。您可以使用am broadcast发送相同的意图。

的命令是:

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

我一直在使用:'adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:/// mnt/sdcard/Music' – foosion

+0

我注意到Kitkat的重新扫描不会马上发生,只有最终。我不记得旧API的情况是否如此。有没有办法强制重新扫描立即发生? – futtetennista

+2

@foosion适用于运行Android 5.1.1,6.0和6.0.1的Nexus 6。 –

10

的MEDIA_MOUNTED意图不再允许(奇巧交),用于非系统的应用程序;试试这个。

虽然它不是递归的,但必须在exact_file_name上运行,所以它不是一个好的替代品。

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

如果需要重新扫描递归,您可以使用此命令(相应的修复路径):

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

或者像这样(如上面会不会为你工作):

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

它是'android.intent.action.MEDIA_SCANNER_SCAN_FILE',不是'android.intent.action.ACTION_MEDIA_SCANNER_SCAN_FILE'。 ACTION_ *是Android变量的名称:https://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_SCAN_FILE – rom1v