13

Uygulamam, dosyaları, cihazın Müzik klasörünün bir alt dizinine indirmek için DownloadManager'ı kullanıyor.Android 6.0 - uygulamadan kaldırıldıktan sonra harici depolama dosyaları siliniyor

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

I (bu eski OS sürümlerini üzerinde olmuyor) uygulaması Marshmallow çalıştıran bir cihazdan kaldırıldığında dosyalar silinir ediliyor olduğunu fark ettik. Bu konuda herhangi bir fikriniz var mı?

Teşekkür

+0

bu davranışı yeniden olunabilir handleUidRemoved() bir çağrı tetikleme Lollipop tanıtıldı. Bunu yaptıkları için çok şaşırmadım ama bu bir gerileme gibi hissettiriyor. – CommonsWare

+2

Aynı davranışın Android 5.1'de (Nexus 4'te test edildi) gerçekleştiğini, ancak Android 4.1'de (Galaxy Nexus'ta test edilmiş) olmadığına dikkat edin, böylece değişiklik bu aralıkta gerçekleşti. Android 6.0 için kesinlikle yeni değil. Emülatör testlerine dayanarak, Android 5.0'da değişiklik geldi gibi görünüyor - 4.4, indirme işlemini sürdürüyor. – CommonsWare

+0

Bu yalnızca indirilen dosyalar veya bir uygulama tarafından ortak klasörlerden birine yerleştirilmiş tüm dosyalar için geçerli midir? Sadece indirilen dosyalar için, hızlı bir kopyası bunu hafifletir, evet? – 323go

cevap

5

Bu İşte android.intent.action.UID_REMOVED eylem dikkatimi 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> 

bir iç sınıfa DownloadReceiver denilen ve tanımlanmış tarafından yapılır. Bu

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

Bu amaç, bir uygulamanın (UID) kaldırıldığını, bir uygulamanın (kullanıcı silindikten sonra kullanıcının indirmelerini kaldırmak için mantıklı olan) bir kullanıcıya atıfta bulunduğu anlamına gelir. https://developer.android.com/reference/ android/content/Intent.html # ACTION_UID_REMOVED – FaultException

+2

@FaultException Gerçek bir kullanıcıya bağlı değil. Uygulamaya atanan Linux sistem kullanıcı kimliğine atıfta bulunur. https://developer.android.com/guide/components/fundamentals.html – tynn

+0

Anladım. Benim hatam. – FaultException

İlgili konular