Подтвердить что ты не робот

Обновите медиаредактор Android, используя adb

Я использую adb для синхронизации музыки на телефоне Android. По существу, я существую существующую музыкальную директорию и нажимаю заменяющие музыкальные файлы.

Я бы хотел использовать adb для принудительного повторного сканирования, чтобы музыкальный плеер google (и другие приложения) работал правильно с новыми песнями и плейлистами.

Согласно Как обновить MediaStore на Android?, вы можете принудительно выполнить повторное сканирование, передав соответствующее намерение.

adb предоставляет "широковещательную передачу оболочки", которая, похоже, позволит мне принудительно выполнить повторное сканирование из adb.

В качестве альтернативы я могу запустить приложение повторного сканирования или перезагрузиться, но я хотел бы запустить повторное сканирование из adb

Какую команду adb я должен указать? Музыкальные файлы и плейлисты находятся в/sdcard/music.

4b9b3361

Ответ 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"