Android携帯電話で音楽を同期するためにadbを使用しています。基本的に、既存の音楽ディレクトリを確認し、交換用の音楽ファイルをプッシュします。
Googleミュージックプレーヤー(および他のアプリ)が新しい曲とプレイリストで適切に動作するように、adbを使用して再スキャンを強制できるようにしたいと思います。
AndroidでMediaStoreを更新するにはどうすればよいですか によると、適切なインテントをブロードキャストすることで再スキャンを強制できます。
adbは「Shell am broadcast」を提供します。これにより、adbからの再スキャンを強制できるように思われます。
または、再スキャンアプリを実行するか再起動することもできますが、adbから再スキャンをトリガーしたいです
どのadbコマンドを発行する必要がありますか?音楽ファイルとプレイリストはすべて/ sdcard/musicにあります。
再スキャンアプリは、メディアマウントインテントを使用して、メディアスキャナーを開始します。 am broadcast
を使用して同じインテントを送信できます。
コマンドは次のとおりです。
adb Shell am broadcast -a Android.intent.action.MEDIA_MOUNTED -d file:///sdcard
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"
一部のSamsungモバイルでは、次のような完全な再スキャンを取得できます。
am broadcast -a com.samsung.intent.action.MTP_FILE_SCAN -n com.Android.providers.media/.MediaScannerReceiver
電話をルート化した場合は、私が書いたこのスクリプトを使用できます。これには、どのファイルが既に更新されたかを追跡できるという利点があります。
#!/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"