Qu'est-ce qu'un fournisseur de contenu ?
Il semble qu'il s'agisse d'un problème lié aux fournisseurs de médias. Comme leur nom l'indique, ils fournissent une base de données des médias disponibles d'une manière plus organisée à d'autres applications comme l'application Contacts Storage
( com.Android.providers.contacts ) fournit des contacts aux applications demandeuses. L'objectif est de numériser et de stocker les informations sur les fichiers multimédias pour un accès rapide, afin que les applications individuelles n'aient pas à analyser manuellement les dossiers pour obtenir une bibliothèque à jour, ce qui réduit le temps et les efforts.
Les fournisseurs de médias intégrés d'Android :
Certains explorateurs de fichiers, lecteurs multimédia et applications de galerie dépendent de la base de données des fichiers ( /data/data/com.Android.providers.media/databases/external.db ) construit par Media Storage
pour MediaStore du fournisseur de contenu à partir du contenu du stockage externe ( /sdcard
et carte SD externe ; les supports amovibles comme l'USB ne sont pas indexés). Apps Media Storage
( com.Android.providers.media en vertu de laquelle com.process.media runs), Downloads
( com.Android.providers.downloads.ui ), Download Manager
( com.Android.providers.downloads ) et MTP Host
( com.Android.mtp ) travaillent en collaboration sous le même UID.
La base de données est construite/mise à jour au fur et à mesure que MediaScanner
( Android.process.media ) est invoqué par une application, par exemple en envoyant des messages de diffusion. FICHIER_MÉDIA_SCANNER_SCANNER ou par scanFile . Récepteur de radiodiffusion com.android.providers.media.MediaScannerReceiver
est lancé au démarrage et écoute les Android.intent.action.BOOT_COMPLETED pour que MediaScannerService soit également lancé au démarrage. Mais il arrive que le redémarrage du téléphone ne mette pas à jour toute la base de données externe (ou du moins retarde le processus). MediaScanner est également déclenché lorsqu'un nouveau périphérique de stockage est monté, c'est-à-dire sur MEDIA_MOUNTED qui pourrait éventuellement être diffusé manuellement pour forcer la mise à jour sur les versions antérieures à KitKat.
En réponse, les applications sont informées de la mise à jour des bases de données, par exemple en recevant des diffusions. SCANNEUR_MÉDIA_FINI ou par onScanCompleted .
Problème avec les fournisseurs de médias :
MtpService fait également partie de Media Storage. En raison de certains bogues ( reconnu depuis 2012 ) dans la mise en œuvre du MTP, la base de données n'est pas mise à jour ou est retardée ou n'est pas correctement communiquée au client lorsque les fichiers changent, de sorte que le MTP montre des contenus périmés / incomplets. La même chose peut se produire si une application créant ou téléchargeant un nouveau fichier ne déclenche pas le MediaScanner ou ne reçoit pas en retour les informations mises à jour.
Solution :
Afin de forcer la mise à jour de la base de données, supprimez le fichier et exécutez quelques scanner de médias app. Les utilisateurs non rootés peuvent supprimer ce fichier en effaçant les données de l'application. Media Storage
app.
Mais attention, ça va aussi dégager internal.db
ce qui rendra les sonneries indisponibles et une nouvelle base de données sera construite à partir de /system/media
au prochain redémarrage, c'est-à-dire au BOOT_COMPLETED
.
PS : Notez que la carte SD interne que nous voyons est émulé de /data/media/
en utilisant sdcardfs
(ou FUSE
dans les anciennes versions d'Android). Le contenu réel de la mémoire interne peut être vu directement à partir de /data/media/
(Racine requise). UMS utilisé pour exposer le /data
d'un dispositif de blocage à un PC mais a été déprécié en faveur du MTP. C'est une bonne option lorsque des données de grande taille doivent être transférées à grande vitesse. Il peut être activé par une solution de contournement .
Il existe également d'autres alternatives raisonnables pour MTP comme FTP, SFTP/SSHFS, adbfs etc.
RESSOURCES :