使用adb刷新Android媒体库

foo*_*ion 45 android adb android-mediascanner

我正在使用adb在Android手机上同步音乐.基本上,我是现有的音乐目录并推送替换音乐文件.

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

根据我如何在Android上刷新MediaStore?您可以通过广播适当的意图强制重新扫描.

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

或者,我可以运行重新扫描应用程序或重新启动,但我想从adb触发重新扫描

我应该发出什么adb命令?音乐文件和播放列表都在/ sdcard/music中.

小智 53

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

命令是:

adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard
Run Code Online (Sandbox Code Playgroud)

  • 我一直在使用:`adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:/// mnt/sdcard/Music` (30认同)
  • @foosion适用于运行Android 5.1.1,6.0和6.0.1的Nexus 6. (2认同)
  • @foosion 在运行 Android N 预览版的 Nexus 6 上**不起作用**。我得到一个安全例外。 (2认同)
  • @JaredBurrows它需要root on Nougat:adb shell su -c'am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:/// sdcard' (2认同)

小智 22

对于非系统应用程序,不再允许(发布KitKat)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>
Run Code Online (Sandbox Code Playgroud)

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

adb shell "find /mnt/sdcard/Music/ -exec am broadcast \
    -a android.intent.action.MEDIA_SCANNER_SCAN_FILE \
    -d file://{} \\;"
Run Code Online (Sandbox Code Playgroud)

或者像这样(如果上面不适合你):

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