آموزش دانلود فایل با قابلیت Pause و Resume در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش دانلود فایل با قابلیت Pause و Resume در اندروید می پردازیم در این آموزش با استفاده از یک کتاب خانه امکان Pause یا Stop کردن دانلود و همینطور Resume یا ادامه دادن آن را به شما آموزش می دهیم شاید دانلود یک فایل در اندروید در برخی موارد نیازمند هست تا مدت زمانی دانلود ما قطع شود یا سپس دوباره ادامه پیدا کند در ادامه با ما همراه باشید تا نحوه انجام این کار را یاد گیرید.
همانطور که در بالا گفتیم ما از یک کتاب خانه برای این منظور استفاده می کنیم نام این کتاب خانه PRDownloader است و به تازگی منشتر شده است.
نکته : (در این آموزش به ذخیره فایل و دسترسی مربوط به فایل نمی پردازیم می توانید از آموزش های سایت برای این منظور استفاده کنید )
خب برویم سراغ کدهای اصلی برنامه ابتدا باید کتاب خانه را به برنامه اضافه کنیم برای اینکار مثل زیر عمل می کنیم.
ابتدا وارد فایل Build.gradle از نوع Module شده سپس خط زیرا به dependencies اضافه کنید.
1 | compile 'com.mindorks.android:prdownloader:0.4.0' |
بعد از اینکار پروژه را sync کنید (قند شکن فراموش نشود)
وارد AndroidManifest.xml شده و دسترسی اینترنت را همانند زیر به آن اضافه کنید.
1 | <uses-permission android:name="android.permission.INTERNET" /> |
برای استفاده از آن باید به Context اکتیویتی را همانند زیر به آن پاس دهید.
1 | PRDownloader.initialize(getApplicationContext()); |
اگر بخواهید یکسری تنظیمات خاص مثلا تنظیم Timeout هنگام دانلود و تنظیم Tineout هنگام اتصال و در نهایت استفاده از دیتابیس داخلی باید یک Config سفارشی بسازید مثل زیر
فعال کردن دیتابیس داخلی
1 2 3 4 | PRDownloaderConfig config = PRDownloaderConfig.newBuilder() .setDatabaseEnabled(true) .build(); PRDownloader.initialize(getApplicationContext(), config); |
تنظیم Timeout
1 2 3 4 5 | PRDownloaderConfig config = PRDownloaderConfig.newBuilder() .setReadTimeout(30_000) .setConnectTimeout(30_000) .build(); PRDownloader.initialize(getApplicationContext(), config); |
حالا برای اینکه یک Request برای دانلود بفرستید مثل زیر می توان عملکرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | int downloadId = PRDownloader.download(url, dirPath, fileName) .build() .setOnStartOrResumeListener(new OnStartOrResumeListener() { @Override public void onStartOrResume() { } }) .setOnPauseListener(new OnPauseListener() { @Override public void onPause() { } }) .setOnCancelListener(new OnCancelListener() { @Override public void onCancel() { } }) .setOnProgressListener(new OnProgressListener() { @Override public void onProgress(Progress progress) { } }) .start(new OnDownloadListener() { @Override public void onDownloadComplete() { } @Override public void onError(Error error) { } }); |
در بالا یک Constructor وجود دارد که سه ورودی دارد اولی url مربوط به فایل ماست که می خواهیم دانلود شود دومین ورودی مسیر ذخیره سازی فایل است و در آخرین ورودی نام فایل را تغیین می کند.
یکسری method از این کلاس Implement شده است که عبارتند از :
- setOnStartOrResumeListener : زمانی که دانلود ما resume شود وارد این متد می شود.
- setOnPauseListener : زمانی که دانلود Stop یا pause شود وارد این متد می شود.
- setOnCancelListener : زمانی که دانلود Cancel شود وارد این متد می شود.
- setOnProgressListener : در طول دانلود وارد این متد می شود.
- onDownloadComplete : زمانی که دانلود به پایان برسد وارد این متد می شود.
- onError : و در نهایت اگر خطای رخ دهد وارد این متد می شود.
برخی از متدهای کاربردی که مورد استفاده می توانید قرار دهید همانند زیر است.
برای اینکه با کد دانلود را Pause کنید از کد زیر استفاده کنید.
1 | PRDownloader.pause(downloadId); |
برای اینکه با استفاده از کد دانلود را Resume کنید از کد زیر استفاده کنید.
1 | PRDownloader.resume(downloadId); |
Cancel کردن دانلود با استفاده از کد زیر
1 | PRDownloader.cancel(downloadId); |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام
ممنون از آموزش واقعا خلاصه و مفید و کاربردی بود.
فقط تو تست به مشکل خوردم دانلود و توقف با موفقیت انجام میشه ولی resume کار نمی کنه و onError اجرا میشه
نمونه کد :
سلام و درود کتاب خانه تست شده مشکلی نداره البته قبلا تست کردم اگر دیدم مشکل داره اعلام می کنم.
درست میفرمایید کتاب خانه مشکلی نداره مشکل از کدهای سمت سرور بود
ممنون از وقتی که گذاشتید
خواهش می کنم
موفق باشید.
مهندس موقعی که در حال دانلوده و دسترسی اینترنت قطع میشه بعد از دسترسی دوباره اینترنت ادامه دانلود اتفاق نمی افتد و از اول دانلود شروع می شود
برای حل این مشکل چیکار میشه کرد؟؟ اگه این کتابخانه این کار را پشتیبانی نمیکنه از کدام کتابخانه برای دانلود استفاده کنم؟؟؟ چون این عمل شدیدا موجب
نارضایتی کاربر میشه
سلام و درود
این مشکل به خاطر corrupt شدنه فایله کتابخانه به احتمال زیاد همچین چیزی رو در نظر نگرفته چون وقتی اینترنت قطع میشه connection دانلود die میشه کاریش نمیشه کرد کتابخانه ای شبیه ندیدم باید کاستوم بنویسید.
موفق و پیروز باشید.
مهندس این مقاله که در مورد دانلود فایل بدون کتابخانه است که اموزش ان در سایت موجوده چطوره واسه حل این مشکل؟
(مهندس شدیدا به ادامه دانلود بعد از توقف و pause دانلود نیاز دارم ممنون میشم این ها را به صورت custom به صورت کد توضیح دهید چه کنم)
ممنون، خیلی مفید بود..
مشکلی که من دارم اینه که فقط در دانلود فایل از هاست لینوکسی درست عمل نمیکنه! 🙁