13

मेरा ऐप डिवाइस के संगीत फ़ोल्डर की उपनिर्देशिका में फ़ाइलों को डाउनलोड करने के लिए DownloadManager का उपयोग करता है।एंड्रॉइड 6.0 - ऐप अनइंस्टॉल करने पर बाहरी स्टोरेज फाइलों को हटाया जा रहा है

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

मैं देखा है कि फ़ाइलें जब एप्लिकेशन Marshmallow चलाने वाले किसी उपकरण से की स्थापना रद्द करने से नष्ट कर दिया जा रहा है (इस पुराने OS संस्करण पर नहीं हो रहा है)। क्या आपके पास इसके बारे में कोई विचार है?

धन्यवाद

+0

मैं इस व्यवहार को पुन: पेश कर सकते हैं handleUidRemoved() के लिए एक कॉल ट्रिगर। मैं बहुत ही चौंकाने वाला नहीं हूं कि उन्होंने ऐसा किया, लेकिन यह एक प्रतिगमन की तरह महसूस करता है। – CommonsWare

+2

ध्यान दें कि एंड्रॉइड 5.1 (नेक्सस 4 पर परीक्षण) के साथ एक ही व्यवहार होता है, लेकिन एंड्रॉइड 4.1 (गैलेक्सी नेक्सस पर परीक्षण) के साथ नहीं है, इसलिए उस सीमा में परिवर्तन हुआ। यह एंड्रॉइड 6.0 के लिए सख्ती से नया नहीं है। एमुलेटर परीक्षण के आधार पर, ऐसा लगता है कि एंड्रॉइड 5.0 में बदलाव आया - 4.4 डाउनलोड रखता है, 5.0 नहीं। – CommonsWare

+0

क्या यह केवल डाउनलोड की गई फ़ाइलों के लिए होता है, या किसी ऐप द्वारा सार्वजनिक फ़ोल्डर में से किसी एक फाइल में रखा जाता है? अगर केवल डाउनलोड की गई फ़ाइलों के लिए, तो एक त्वरित प्रतिलिपि इसे कम कर देगी, हां? – 323go

उत्तर

5

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

में एक आंतरिक वर्ग DownloadReceiver कहा जाता है और परिभाषित द्वारा किया जाता है यहाँ android.intent.action.UID_REMOVED कार्रवाई आंख फैल जाती है। यह लॉलीपॉप में पेश किया गया था प्रदर्शन

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

यह इरादा किसी उपयोगकर्ता (यूआईडी) को संदर्भित नहीं करता है, न कि एक एप्लिकेशन, (जो उपयोगकर्ता के डाउनलोड को हटाने के बाद उपयोगकर्ता के डाउनलोड को हटाने के लिए समझ में आता है।) https://developer.android.com/reference/ एंड्रॉइड/सामग्री/Intent.html # ACTION_UID_REMOVED – FaultException

+2

@FaultException यह वास्तविक उपयोगकर्ता से कनेक्ट नहीं है। यह एप्लिकेशन को आवंटित लिनक्स सिस्टम उपयोगकर्ता आईडी को संदर्भित करता है। https://developer.android.com/guide/components/fundamentals.html – tynn

+0

मैं देखता हूं। मेरी गलती। – FaultException

संबंधित मुद्दे