13

La mia app utilizza DownloadManager per scaricare i file in una sottodirectory della cartella Musica del dispositivo.Android 6.0: file di archiviazione esterni eliminati dopo la disinstallazione dell'app

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

ho notato che i file vengono eliminati quando l'applicazione viene disinstallato da un dispositivo che esegue Marshmallow (questo non sta accadendo sulle vecchie versioni del sistema operativo). Avete qualche idea al riguardo?

Grazie

+0

posso riprodurre questo comportamento. Non sono terribilmente scioccato dal fatto che lo abbiano fatto, ma sembra una regressione. – CommonsWare

+2

Si noti che lo stesso comportamento si verifica con Android 5.1 (testato su un Nexus 4), ma non con Android 4.1 (testato su un Galaxy Nexus), quindi il cambiamento è avvenuto in tale intervallo. Non è strettamente nuovo per Android 6.0. Sulla base del test dell'emulatore, sembra che il cambiamento sia avvenuto in Android 5.0 - 4.4, mentre il download non lo fa, 5.0 no. – CommonsWare

+0

Ciò accade solo per i file scaricati o per tutti i file inseriti in una delle cartelle pubbliche da un'app? Se solo per i file scaricati, una copia veloce allevierebbe questo, sì? – 323go

risposta

5

Questo è fatto da una classe interna denominata DownloadReceiver e definito nel 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> 

Qui l'azione android.intent.action.UID_REMOVED cattura l'occhio. È stato introdotto nel Lollipop innescando una chiamata a svolgere handleUidRemoved()

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

Questo intento sembra riferirsi a un utente (UID) rimosso, non a un'applicazione (che avrebbe senso rimuovere i download dell'utente dopo che il loro utente è stato eliminato.) https://developer.android.com/reference/ android/content/Intent.html # ACTION_UID_REMOVED – FaultException

+2

@FaultException Non è connesso a un utente reale. Si riferisce all'ID utente di sistema Linux assegnato all'applicazione. https://developer.android.com/guide/components/fundamentals.html – tynn

+0

Vedo. Errore mio. – FaultException

Problemi correlati