8 votes

Faire en sorte que mediaserver analyse immédiatement un fichier créé par ADB

Le mediaserver de mon Android 6.0.1 stock et rooté (fonctionnant sur Nexus 6) ne détecte pas les nouveaux fichiers créés ou déplacés dans /sdcard en utilisant adb. Il ne détecte pas jusqu'à ce que je fasse un soft/full reboot ce qui est inacceptable.

Je suis capable de lancer manuellement mediaserver en utilisant la ligne de commande pour recommencer le balayage des fichiers. # et je veux que cela soit fait automatiquement et immédiatement dès qu'un nouveau fichier est créé sous /sdcard . Pour l'instant, je fais exécuter le médiateur par Tasker chaque fois que le câble USB est débranché. *

Le choix évident ici semble être une application d'automatisation dont j'ai essayé Tasker et Automatiser Les deux n'ont pas réussi à détecter les nouveaux fichiers, en particulier sous /sdcard/Music, lorsqu'ils ont été créés par adb. Cependant, si une application créait des fichiers dans n'importe quel répertoire sous /sdcard ces deux applications ont immédiatement détecté les changements. J'ai aussi essayé de pousser des fichiers vers /storage/emulated/0/ au lieu de /sdcard/ et fait les changements correspondants dans les déclencheurs de ces deux applications. Cette étape ne m'a pas profité.

Il est à noter que j'ai observé ce problème dans la version stock d'Android 5.1.1 et dans une version snapshot de CM13.

Alors, comment atteindre l'objectif ?

Update

Je sais qu'il est possible de créer un alias dans le système d'exploitation de mon PC qui exécuterait un script permettant de pousser le fichier et d'exécuter le serveur multimédia. Cependant, c'est quelque chose que je voudrais éviter autant que possible.

* Je l'utilisais, mais je suis ensuite passé à un script exécuté depuis le PC en utilisant un alias. Cependant, Je ne veux dépendre d'aucune des deux méthodes . Mes doigts sont à l'aise pour taper adb push au lieu de adb_push ou un autre mais unique mot.

Mise à jour 2

  • Je n'ai pas l'intention de me limiter à un répertoire particulier, tel que Download et ni de pousser des fichiers dans ce dernier ne fonctionne réellement.
  • Je tiens à souligner que je ne demande pas comment lancer mediaserver . Je le sais déjà. Tout ce que je cherche, c'est : Quand je fais adb push FILE /sdcard/FILE le mediaserver devrait automatiquement et immédiatement se mettre en marche et scanner le fichier. Indépendamment de tout problème de performance perceptible, je veux qu'il se déclenche à chaque fois.

Mise à jour 3

Ok, J'utilise peut-être un terme incorrect . Peut-être mediaserver y scanner de médias sont des termes désignant deux choses différentes dans Android. En cas de confusion, veuillez vous en tenir à "media scanner" à la fois pour la révision actuelle et pour la note de prime.

Mise à jour 4

# Courtoisie de androidyue pour cette ressource utile si l'une des commandes suivantes en texte préformaté est ce que je peux utiliser dans mon appareil pour que le scanner de médias scanne le fichier.

\# FILE\_PATH refers to the location of pushed file in Android. E.g. /sdcard/Music/lolcat.mp3

am broadcast -a android.intent.action.BOOT\_COMPLETED -n com.android.providers.media/.MediaScannerReceiver
am broadcast -a android.intent.action.MEDIA\_SCANNER\_SCAN\_FILE -d file://FILE\_PATH   # guaranteed to work. See https://goo.gl/lH0CLT for proof.
am broadcast -a android.intent.action.MEDIA\_MOUNTED -d file://FILE\_PATH 

Mise à jour 5

Par le suggestion de Manubhargav, j'ai essayé le MTPFix de Sarkie disponible aquí . Cela n'a pas fonctionné, à la fois sous Android 6.0.1 et CM13. J'ai vu l'entrée suivante lorsque j'ai activé le service pour cette application.

04-07 09:38:14.771  3383  3383 I MTPService: Watching /storage/emulated/0

J'ai ensuite poussé un fichier son dans /storage/emulated/0/ et rien n'apparaissait dans mon lecteur de musique. Logcat n'a rien affiché d'utile non plus.

Au fait, cette application utilise FileObserver Je ne suis donc pas surpris qu'il ne puisse pas détecter les fichiers créés avec adb, puisque c'est le même problème avec les applications d'automatisation que j'ai essayées.


Note : Ne postez une réponse que si vous l'avez testée vous-même. Nous vous remercions.

2voto

Firelord Points 23064

Ok, il semble que la réponse soit triviale. Mes doigts n'ont pas à perdre le confort de la frappe adb push mais je pourrais faire en sorte que le scanner de médias analyse mon fichier poussé, automatiquement et immédiatement . Voici mon script adapté à mes besoins :

( <strong>Note </strong>: L'accès à la racine est <em>no </em>nécessaire dans Android)

#!/bin/bash

function push\_file () {
    target="${@: -1}";
    file\_path="${@: -2:1}";
    \[\[ "$prog\_bar" == "-p" \]\] && adb "$@" || $call\_adb push -p "$file\_path" "$target";
}

function broadcast () {
    file\_name="$(basename "$file\_path")";
    \[\[ \`echo "${target: -1}"\` != "/" \]\] && unset file\_name;
    \[\[ \`echo "${target:0:1}"\` != "/"  \]\] && target="/${target}";
    $call\_adb shell 'am broadcast -a android.intent.action.MEDIA\_SCANNER\_SCAN\_FILE -d '"\\"file://$target$file\_name\\""'' > /dev/null;
}

if \[\[ "$1" == "-s" \]\]; then
    if \[\[ "$3" == "push" \]\]; then
        prog\_bar="$4";
        call\_adb="adb -s $2";
        push\_file "$@" && broadcast;
    else
        adb "$@";
    fi
elif \[\[ "$1" == "push" \]\]; then
        prog\_bar="$2";
        call\_adb="adb";
        push\_file "$@" && broadcast;
else
    adb "$@";
fi

J'ai ensuite créé un alias nommé adb sur .bashrc comme ça :

alias adb='bash FILE'  # FILE refers the file path of the said script

Cela a été possible grâce à cet article très utile : Traitement des paramètres positionnels sur Bash Hackers Wiki.

Note le script nécessite plus ou moins un système d'exploitation basé sur *nix dans un PC avec la version 4.x de Bash installée et le support de .bashrc . Si vous avez l'intention d'utiliser le script, nous vous encourageons à le modifier pour l'adapter à votre style de travail.

0voto

Empire of E Points 1586

Je ne sais pas exactement comment fonctionne le scanner de médias, Je pense que le scanner de médias met constamment à jour le dossier de téléchargement dans le stockage interne...

si quelque chose ne s'affiche pas dans un autre dossier, je le copie dans le dossier de téléchargement et cela déclenche l'analyseur de médias...

Essayez d'utiliser le dossier de téléchargement dans le stockage interne comme chemin absolu.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X