Android पर प्रोग्रेस इंडिकेटर के साथ फ़ाइल डाउनलोड करें: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Android पर फ़ाइल डाउनलोड करना: विचार से काम करने वाले कोड तक

\n\n

प्रत्येक Android डेवलपर को देर-सबेर नेटवर्क से फ़ाइल डाउनलोड करने के कार्य का सामना करना पड़ता है। यह ऐप अपडेट, इमेज, PDF दस्तावेज़ या संगीत ट्रैक डाउनलोड करना हो सकता है। लेकिन केवल फ़ाइल डाउनलोड करना आधा काम है। उपयोगकर्ता को यह देखना चाहिए कि प्रक्रिया चल रही है: कितना डाउनलोड हुआ, कितना बाकी है, और ऐप हैंग नहीं हुआ है।

\n\n

इस लेख में, हम Stack Overflow के एक क्लासिक प्रश्न पर चर्चा करेंगे, जिसे हज़ारों बार देखा गया है: Android पर फ़ाइल कैसे डाउनलोड करें और डायलॉग बॉक्स में प्रोग्रेस कैसे दिखाएं। हम Java में कोड लिखेंगे, AsyncTask और ProgressDialog का उपयोग करते हुए (हालाँकि आधुनिक प्रोजेक्ट्स में इन्हें अक्सर कोरूटीन या RxJava से बदल दिया जाता है, लेकिन क्लासिक्स को समझना एक बुनियादी बात है जो कहीं नहीं गई है)।

\n\n

तैयार हैं? चलिए शुरू करते हैं!

\n\n

यह इतना मुश्किल क्यों है? Android में डाउनलोड करने के तीन मुख्य नुकसान

\n\n

पहली नज़र में, कार्य सरल लगता है: कनेक्शन खोलें, बाइट्स की स्ट्रीम पढ़ें, फ़ाइल में लिखें। लेकिन व्यवहार में, डेवलपर्स तीन चीज़ों पर अटक जाते हैं:

\n\n
    \n
  • UI-थ्रेड ब्लॉक हो जाता है — यदि आप मुख्य थ्रेड में डाउनलोड शुरू करते हैं, तो ऐप "फ़्रीज़" हो जाएगा और Android "ऐप प्रतिक्रिया नहीं दे रहा है" डायलॉग दिखाएगा।
  • \n
  • प्रोग्रेस अपडेट नहीं होती — भले ही आप बाइट्स गिन रहे हों, आप बैकग्राउंड थ्रेड से UI को आसानी से नहीं बदल सकते।
  • \n
  • कॉन्फ़िगरेशन बदल जाता है — उपयोगकर्ता स्क्रीन घुमाता है, और आपका Activity फिर से बन जाता है। डायलॉग गायब हो जाता है, और डाउनलोड कहीं नहीं जा रहा होता।
  • \n
\n\n

हम तीनों समस्याओं का समाधान करेंगे। हम आर्किटेक्चर से शुरू करेंगे, फिर कोड लिखेंगे।

\n\n

टूल्स चुनना: AsyncTask और ProgressDialog

\n\n

शैक्षिक उद्देश्यों के लिए, हम क्लासिक दृष्टिकोण का उपयोग करेंगे:

\n
    \n
  • AsyncTask — बैकग्राउंड कार्य करने और प्रोग्रेस प्रकाशित करने के लिए।
  • \n
  • ProgressDialog — प्रतिशत प्रदर्शित करने के लिए।
  • \n
  • HttpURLConnection — HTTP अनुरोध के लिए (यह अभी भी काम करता है, भले ही पुराना हो गया हो)।
  • \n
\n\n

महत्वपूर्ण: वास्तविक प्रोजेक्ट्स में आज अक्सर DownloadManager, WorkManager या Retrofit + OkHttp जैसी लाइब्रेरी का उपयोग किया जाता है। लेकिन यह समझना कि डाउनलोड "हाथ से" कैसे काम करता है, किसी भी डेवलपर के लिए must-have है।

\n\n

पूर्ण कोड: ProgressDialog के साथ फ़ाइल डाउनलोड करना

\n\n

नीचे डाउनलोड के लिए एक तैयार क्लास दी गई है। कोड पर टिप्पणियाँ हैं ताकि आप तुरंत समझ सकें कि क्या हो रहा है।

\n\n
import android.app.ProgressDialog;\nimport android.content.Context;\nimport android.os.AsyncTask;\nimport android.os.Environment;\nimport android.widget.Toast;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.InputStream;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class DownloadFileTask extends AsyncTask<String, Integer, String> {\n\n    private Context context;\n    private ProgressDialog progressDialog;\n\n    public DownloadFileTask(Context context) {\n        this.context = context;\n    }\n\n    @Override\n    protected void onPreExecute() {\n        super.onPreExecute();\n        // प्रोग्रेस डायलॉग बनाएँ और दिखाएँ\n        progressDialog = new ProgressDialog(context);\n        progressDialog.setTitle("फ़ाइल डाउनलोड");\n        progressDialog.setMessage("डाउनलोड हो रहा है...");\n        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);\n        progressDialog.setCancelable(false); // गलती से बंद न होने दें\n        progressDialog.show();\n    }\n\n    @Override\n    protected String doInBackground(String... params) {\n        String fileUrl = params[0];\n        String fileName = "downloaded_file.pdf"; // दूसरे पैरामीटर के रूप में भेजा जा सकता है\n        InputStream inputStream = null;\n        FileOutputStream outputStream = null;\n\n        try {\n            // 1. कनेक्शन स्थापित करें\n            URL url = new URL(fileUrl);\n            HttpURLConnection connec                

ब्लॉग

पुस्तक अनुशंसाएँ