13

Meine App verwendet den DownloadManager zum Herunterladen von Dateien in ein Unterverzeichnis des Musikordners des Geräts.Android 6.0 - Externe Speicherdateien, die beim Deinstallieren der App gelöscht werden

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)); 

Ich habe bemerkt, dass die Dateien gelöscht werden, wenn die Anwendung von einem Gerät läuft Eibisch deinstalliert wird (dies geschieht auf nicht ältere OS-Versionen). Haben Sie Ideen dazu?

Dank

+0

Durchführung ich dieses Verhalten reproduzieren kann. Ich bin nicht besonders schockiert, dass sie das getan haben, aber das fühlt sich wie ein Rückschritt an. – CommonsWare

+2

Beachten Sie, dass das gleiche Verhalten bei Android 5.1 (getestet auf einem Nexus 4), aber nicht mit Android 4.1 (getestet auf einem Galaxy Nexus) auftritt, so dass die Änderung in diesem Bereich aufgetreten ist. Es ist nicht unbedingt neu für Android 6.0. Basierend auf Emulator-Tests sieht es aus, als ob die Änderung in Android 5.0 kam - 4.4 hält den Download, 5.0 nicht. – CommonsWare

+0

Erfolgt dies nur für heruntergeladene Dateien oder für alle Dateien, die von einer App in einem der öffentlichen Ordner abgelegt werden? Wenn nur für heruntergeladene Dateien, dann würde eine schnelle Kopie dies erleichtern, ja? – 323go

Antwort

5

Dies wird durch eine interne Klasse getan DownloadReceiver genannt und in der definierten com.android.providers.downloadspackage manifest

<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> 

Hier die android.intent.action.UID_REMOVED Aktion ins Auge. Es wurde in Lollipop Auslösen eines Anrufs zu handleUidRemoved() eingeführt

resolver.delete(ALL_DOWNLOADS_CONTENT_URI, Constants.UID + "=" + uid, null); 
+0

Diese Absicht scheint sich auf eine entfernte Benutzer (UID) zu beziehen, nicht auf eine Anwendung (die es sinnvoll wäre, die Downloads eines Benutzers nach dem Löschen seines Benutzers zu entfernen.) https://developer.android.com/reference/ android/content/Intent.html # ACTION_UID_REMOVED – FaultException

+2

@FaultException Es ist nicht mit einem echten Benutzer verbunden. Er bezieht sich auf die Benutzer-ID des Linux-Systems, die der Anwendung zugewiesen ist. https://developer.android.com/guide/components/fundamentals.html – tynn

+0

Ich sehe. Mein Fehler. – FaultException

Verwandte Themen