web-dev-qa-db-ja.com

リフレッシュAndroid adbを使用したメディアストア

Android携帯電話で音楽を同期するためにadbを使用しています。基本的に、既存の音楽ディレクトリを確認し、交換用の音楽ファイルをプッシュします。

Googleミュージックプレーヤー(および他のアプリ)が新しい曲とプレイリストで適切に動作するように、adbを使用して再スキャンを強制できるようにしたいと思います。

AndroidでMediaStoreを更新するにはどうすればよいですか によると、適切なインテントをブロードキャストすることで再スキャンを強制できます。

adbは「Shell am broadcast」を提供します。これにより、adbからの再スキャンを強制できるように思われます。

または、再スキャンアプリを実行するか再起動することもできますが、adbから再スキャンをトリガーしたいです

どのadbコマンドを発行する必要がありますか?音楽ファイルとプレイリストはすべて/ sdcard/musicにあります。

45
foosion

再スキャンアプリは、メディアマウントインテントを使用して、メディアスキャナーを開始します。 am broadcastを使用して同じインテントを送信できます。

コマンドは次のとおりです。

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

MEDIA_MOUNTEDインテントは、非システムアプリでは許可されなくなりました(KitKat以降)。代わりにこれを試してください。

ただし、再帰的ではなく、exact_file_nameで実行する必要があるため、適切な代替ではありません。

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"
21
Manas Tungare

一部のSamsungモバイルでは、次のような完全な再スキャンを取得できます。

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

電話をルート化した場合は、私が書いたこのスクリプトを使用できます。これには、どのファイルが既に更新されたかを追跡できるという利点があります。

#!/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