web-dev-qa-db-fra.com

Actualiser le médiastore Android avec adb

J'utilise adb pour synchroniser de la musique sur un téléphone Android. Essentiellement, je suis le répertoire de musique existant et les fichiers de musique de remplacement Push.

J'aimerais pouvoir utiliser adb pour forcer une nouvelle analyse, afin que le lecteur de musique Google (et les autres applications) fonctionne correctement avec les nouveaux morceaux et les nouvelles listes de lecture.

Selon Comment actualiser MediaStore sur Android? vous pouvez forcer une nouvelle analyse en diffusant une intention appropriée.

adb fournit «Shell am broadcast», ce qui semble me permettre de forcer une nouvelle analyse à partir de adb.

Sinon, je pourrais exécuter une application de réanalyse ou redémarrer, mais je voudrais déclencher la réanalyse à partir de adb

Quelle commande adb devrais-je lancer? Les fichiers de musique et les listes de lecture sont tous dans/sdcard/music.

40
foosion

Les applications de réanalyse utilisent une intention de montage multimédia pour lancer le scanner multimédia. Vous pouvez utiliser am broadcast pour envoyer la même intention.

La commande est:

adb Shell am broadcast -a Android.intent.action.MEDIA_MOUNTED -d file:///sdcard
51
user2892047

L'intention MEDIA_MOUNTED n'est plus autorisée (après KitKat) pour les applications non-système. essayez ceci à la place.

Ce n'est pas récursif, cependant, et doit être exécuté sur le nom_fichier_exact, donc ce n'est pas un bon remplacement.

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

Si vous devez réanalyser de manière récursive, vous pouvez utiliser cette commande (corrigez les chemins en conséquence):

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

Ou comme ceci (si ci-dessus ne fonctionnera pas pour vous):

adb Shell "find /mnt/sdcard/Music/ | while read f; do \
    am broadcast -a Android.intent.action.MEDIA_SCANNER_SCAN_FILE \
    -d \"file://${f}\"; done"
15
Manas Tungare

Sur certains mobiles Samsung, vous pouvez obtenir une nouvelle analyse complète comme ceci:

am broadcast -a com.samsung.intent.action.MTP_FILE_SCAN -n com.Android.providers.media/.MediaScannerReceiver
1
Sander

Si vous avez enraciné votre téléphone, vous pouvez utiliser le script que j'ai écrit et qui présente l'avantage de savoir quels fichiers ont déjà été mis à jour:

#!/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"
0
André von Kugland