2013-01-21 15 views
5

मैं Download Manager का उपयोग कर अपने सर्वर से एक छवि डाउनलोड कर रहा हूं।एंड्रॉइड: डाउनलोड मैनेजर - अधिसूचना चिपकाना

यह फ़ाइल को ठीक से डाउनलोड करता है और इसे कहां रखता है जहां मैं इसे चाहता हूं। लेकिन किसी कारण से अधिसूचना छड़ें और मैं को हटाने के लिए प्रतीत नहीं कर सकता।

mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

Uri uri = Uri.parse("URL")); 

long enqueue = mDownloadManager.enqueue(new DownloadManager.Request(uri) 
      .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
      .setAllowedOverRoaming(false) 
      .setTitle("Title") 
      .setDescription("File description") 
      .setDestinationInExternalPublicDir("Folder", "Filename") 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)); 

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 
    } 
}; 

मैं कैसे अधिसूचना एक बार यह डाउनलोड किया गया है निकालूँ: डाउनलोड प्रबंधक के लिए कोड इस प्रकार है?

मैंने भाग्य के साथ सभी अलग-अलग अधिसूचना दृश्यता मोड सेट करने का प्रयास किया है। क्या यह समाप्त होने के बाद ब्रॉडकास्ट रिसीवर से कुछ ऐसा कर सकता है?

उत्तर

8

मैं अपनी समस्या का समाधान करने में कामयाब रहा। BroadcastReceiver में मुझे इरादे से डाउनलोड आईडी प्राप्त करना था और DownloadManager से हटा देना था।

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 

     // Get the download_id of the completed download. 
     long download_id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 

     // Remove the completed download from the DownloadManager 
     mDownloadManager.remove(download_id); 
    } 
}; 

मैं भी ध्यान रखें कि mDownloadManager.remove(download_id) करने से, इस स्मृति से फ़ाइल को नष्ट करना चाहते हैं। मुझे उस स्थान पर फ़ाइल को स्थायी रूप से सहेजने के लिए अतिरिक्त कोड जोड़ना था जिसे मैं मूल रूप से सहेजना चाहता था।

+2

हार्डकोडिंग के बजाय DownloadManager.EXTRA_DOWNLOAD_ID का उपयोग करें "extra_download_id" –

+0

कोई अन्य समाधान नहीं है? मेरा मतलब है कि डाउनलोड की गई फ़ाइल को हटाकर अधिसूचना को साफ़ करना बहुत साफ नहीं है (और आपको इसे पहले सहेजना होगा): फाइल कॉपी और फ़ाइल अधिसूचना केवल एक अधिसूचना स्पष्ट के लिए! – Christian