Обновите медиаредактор Android, используя adb
Я использую adb для синхронизации музыки на телефоне Android. По существу, я существую существующую музыкальную директорию и нажимаю заменяющие музыкальные файлы.
Я бы хотел использовать adb для принудительного повторного сканирования, чтобы музыкальный плеер google (и другие приложения) работал правильно с новыми песнями и плейлистами.
Согласно Как обновить MediaStore на Android?, вы можете принудительно выполнить повторное сканирование, передав соответствующее намерение.
adb предоставляет "широковещательную передачу оболочки", которая, похоже, позволит мне принудительно выполнить повторное сканирование из adb.
В качестве альтернативы я могу запустить приложение повторного сканирования или перезагрузиться, но я хотел бы запустить повторное сканирование из adb
Какую команду adb я должен указать? Музыкальные файлы и плейлисты находятся в/sdcard/music.
Ответы
Ответ 1
В приложениях повторного сканирования используется намерение носителя, чтобы запустить медиапленку. Вы можете использовать am broadcast
для отправки того же намерения.
Команда:
adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///sdcard
Ответ 2
Намерение MEDIA_MOUNTED больше не разрешено (после KitKat) для несистемных приложений; попробуйте это вместо.
Однако он не рекурсивный и должен запускаться с точным именем_файла, так что это не очень хорошая замена.
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"
Ответ 3
На некоторых мобильных телефонах Samsung вы можете получить полное повторное сканирование следующим образом:
am broadcast -a com.samsung.intent.action.MTP_FILE_SCAN -n com.android.providers.media/.MediaScannerReceiver
Ответ 4
Если у вас есть рутированный телефон, вы можете использовать этот скрипт, который я написал, и он имеет преимущество в отслеживании того, какие файлы уже были обновлены:
#!/system/bin/env busybox ash
MUSIC_LIBRARY=/sdcard/MusicLibrary
LAST_UPDATE="$(stat -c %Y "$MUSIC_LIBRARY/.last-update")"
find "$MUSIC_LIBRARY" -type f ! -iname ".last-update" | (
while read f; do
if ! test "$LAST_UPDATE" -ge "$(stat -c %Y "$f")"; then
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file://$f"
touch "$f"
else
echo "Not updated: \'$f'"
fi
done
)
touch "$MUSIC_LIBRARY/.last-update"