Android 6.0 – fichiers de stockage externes en cours de suppression lors de la désinstallation de l'application

Mon application utilise le DownloadManager pour télécharger des fichiers dans un sous-répertoire du dossier Musique de l'appareil.

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); ... File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/MyStuff/song.mp3"); request.setDestinationUri(Uri.fromFile(file)); 

J'ai remarqué que les fichiers sont supprimés lorsque l'application est désinstallée à partir d'un périphérique exécutant Marshmallow (cela ne se produit pas sur les anciennes versions du système d'exploitation). Avez-vous des idées à ce sujet?

  • Dpi de valeur par défaut "grand", "moyen" et "petit" vues de texte Android
  • AmazonServiceException: l'utilisateur n'est pas autorisé à effectuer: dynamodb: DescribeTable Status Code: 400; Code d'erreur: AccessDeniedException
  • Supprimez le marqueur précédent et ajoutez un nouveau marqueur dans Google Map v2
  • Android 4.4 Kitkat personnalisé vue barre d'action ne remplissant pas toute la largeur
  • Comment déplacer, copier et supprimer des fichiers et des répertoires sur SD?
  • Vous n'êtes pas connecté. Veuillez vous connecter et réessayer
  • Merci

  • Comment terminer l'activité actuelle dans Android
  • L'élément de liste avec CheckBox n'est pas cliqué
  • Erreur ICS potentielle à bande pointue Android
  • ERREUR: Problèmes de rendu Les classes suivantes n'ont pas pu être trouvées Android.support.v7.internal.widget.ActionBarOverlayLayout
  • Multiple android.intent.action.MAIN dans le fichier mainfest xml
  • Simulez la faible bande passante dans Android
  • One Solution collect form web for “Android 6.0 – fichiers de stockage externes en cours de suppression lors de la désinstallation de l'application”

    Cela se fait par une classe interne appelée DownloadReceiver et définie dans le manifeste du package com.android.providers.downloads

     <receiver android:name=".DownloadReceiver" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.intent.action.UID_REMOVED" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <data android:scheme="file" /> </intent-filter> </receiver> 

    Ici, l'action android.intent.action.UID_REMOVED attire l'attention. Il a été introduit dans Lollipop déclenchant un appel à handleUidRemoved() performant

     resolver.delete(ALL_DOWNLOADS_CONTENT_URI, Constants.UID + "=" + uid, null); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.