2013-07-29 12 views
34

Używam ADB do synchronizacji muzyki na telefonie z Androidem. Zasadniczo używam istniejącego katalogu muzycznego i przesyłam zastępcze pliki muzyczne.Odśwież Android mediastore za pomocą adb

Chciałbym móc użyć polecenia adb do wymuszenia ponownego skanowania, aby odtwarzacz muzyki Google (i inne aplikacje) działał poprawnie z nowymi utworami i listami odtwarzania.

Zgodnie z How can I refresh MediaStore on Android? można wymusić ponowne skanowanie, nadając odpowiednie intencje.

adb zapewnia "transmisję powłoki", co wydaje mi się pozwalać na wymuszenie ponownego skanowania z adb.

Ewentualnie mogę uruchomić ponownie przeskanować aplikacji lub ponownego uruchomienia, ale chciałbym, aby wywołać ponowne skanowanie z adb

Jakie polecenia adb mam wydać? Pliki muzyczne i listy odtwarzania znajdują się w/sdcard/music.

Odpowiedz

51

Aplikacje do ponownego skanowania używają funkcji montażu nośnika w celu uruchomienia skanera multimediów. Możesz użyć am broadcast, aby wysłać tę samą intencję.

Ciąg:

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

Używam: 'adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d plik: /// mnt/sdcard/Music' – foosion

+0

Zauważyłem, że na Kitkat ponowne skanowanie się nie dzieje od razu, tylko w końcu. Nie pamiętam, czy tak było w przypadku starszych API. Czy istnieje sposób na natychmiastowe uruchomienie skanowania? – futtetennista

+2

@foosion, który działa na moim Nexusie 6 z systemem Android 5.1.1, 6.0 i 6.0.1. –

10

MEDIA_MOUNTED intencją nie jest dopuszczalne (po KitKat) dla aplikacji innych systemów; spróbuj tego zamiast tego.

Nie jest to jednak rekurencyjne i musi być uruchomione na dokładnej nazwie pliku, więc nie jest dobrym zamiennikiem.

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

Jeśli chcesz przeskanować rekurencyjnie, można użyć tego polecenia (ścieżki fix fakcie):

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

Albo tak (jeśli powyższe nie będzie pracować dla Ciebie):

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

To jest "android.intent.action.MEDIA_SCANNER_SCAN_FILE", nie 'android.intent.action.ACTION_MEDIA_SCANNER_SCAN_FILE'. ACTION_ * to nazwa zmiennej Androida: https://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_SCAN_FILE – rom1v

Powiązane problemy