PRDownloader کتابخونه دانلود همه چیز در اندروید

PRDownloader کتابخونه دانلود همه چیز در اندروید
در این پست می‌خوانید:

PRDownloader یه کتابخونه حرفه و عالی برای دانلود در اندروید هستش.

این کتابخونه یکی از پر امکانات ترین کتابخونه ها برای عملیات دانلود هستش.

با این کتابخونه تمامی موارد مربوط به دانلود رو به کاملترین شکل ممکن میتونی مدیریت کنی.

عملیاتی مثل : شروع دانلود، متوقف کرد، ادامه دانلود، تکمیل دانلود و کنسل دانلود رو مدیریت کنی.

پس تمامی موارد مربوط به دانلود کردن رو خیلی راحت میتونی مدیریت کنی.

قبل از اینکه سراغ آموزش بریم بهتره که دمو ای که درست کردم رو ببینی.

با دیدن این دمو بهتر میتونی متوجه بشی که قراره چه چیزی رو آموزش بدم?

دموی کتابخونه PRDownloader

این کتابخونه چه چیزهایی رو میتونه دانلود کنه؟

این کتابخونه هرنوع فایلی از جمله : عکس، فیلم، موزیک، متن، APK، zip، rar و … رو خیلی راحت میتونه دانلود کنه.

پس بدون هیچ محدودیتی خیلی راحت هرنوع فایلی که مدنظرت هست رو دانلود کنی.

آموزش کامل پیاده سازی دانلود در اندروید

همونطور که گفتم برای پیاده سازی عملیات دانلود پیشنهاد میکنم از PRDownloader استفاده کنی.

کار با این کتابخونه بینهایت راحت هستش و خیلی راحت میتونی دانلود رو پیاده سازی کنی.

اگه نخوای از این کتابخونه استفاده کنی و خودت دستی تک تک موارد رو پیاده سازی کنی واقعا باید کلی زمان بزاری?.

برای اینکه از این کتابخونه استفاده کنی باید مراحل زیر رو طی کنی.

کد مربوط به فایل Gradle

کد زیر رو توی فایل build.gradle/app اضافه کن.

implementation 'com.mindorks.android:prdownloader:0.6.0'

بعد از اینکه کد بالا رو اضافه کردی پروژه رو sync کن.

کد مربوط به کلاس Application

بعد از اینکه کتابخونه رو به پروژه اضافه کردی باید تنظیمات اصلی اون رو توی کلاس Application اعمال کنی.

برای اینکار باید کدهای زیر رو به کلاس Application اضافه کنی.

جاواکاتلین
PRDownloaderConfig config = PRDownloaderConfig.newBuilder()
                .setDatabaseEnabled(true)
                .build();
PRDownloader.initialize(getApplicationContext(), config);
val config = PRDownloaderConfig.newBuilder()
    .setDatabaseEnabled(true)
    .build()
PRDownloader.initialize(this, config)

 

برای راحتی کار من سعی کردم که یه رابط کاربری رو هم طراحی کنم.

برای اینکار کد زیر رو توی فایل xml نوشتم.

کد مربوط به لایه xml اکتیویتی

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background"
    tools:context=".prdownloader.PRDownloaderPage">

    <com.google.android.material.card.MaterialCardView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        app:cardBackgroundColor="@color/white"
        app:cardCornerRadius="15dp"
        app:cardElevation="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="10dp">

            <TextView
                android:id="@+id/downloaderPage_start"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:drawableRight="@drawable/ic_round_cloud_download_24"
                android:drawablePadding="10dp"
                android:drawableTint="@color/aquaBlue"
                android:fontFamily="@font/iran_sans"
                android:text="شروع دانلود"
                android:textColor="@color/aquaBlue"
                android:textSize="16sp"
                app:backgroundTint="@color/white"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/downloaderPage_toolsLay"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"
                android:animateLayoutChanges="true"
                android:visibility="visible"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toBottomOf="@id/downloaderPage_start">

                <com.google.android.material.progressindicator.LinearProgressIndicator
                    android:id="@+id/downloaderPage_progressBar"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="30dp"
                    android:layout_marginEnd="16dp"
                    android:progressTint="@color/itemColorStroke"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <TextView
                    android:id="@+id/downloaderPage_downloadSize"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="16dp"
                    android:fontFamily="@font/iran_sans"
                    android:layout_marginTop="16dp"
                    android:textColor="@color/aquaBlue"
                    android:textSize="14sp"
                    android:text="0kb / 30Mb"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@id/downloaderPage_progressBar" />

                <androidx.constraintlayout.helper.widget.Flow
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    app:constraint_referenced_ids="downloaderPage_pause,downloaderPage_cancel"
                    app:flow_horizontalGap="5dp"
                    app:flow_maxElementsWrap="2"
                    app:flow_verticalGap="5dp"
                    app:flow_wrapMode="aligned"
                    app:layout_constraintEnd_toEndOf="@id/downloaderPage_progressBar"
                    app:layout_constraintStart_toStartOf="@id/downloaderPage_progressBar"
                    app:layout_constraintTop_toBottomOf="@id/downloaderPage_downloadSize" />

                <com.google.android.material.button.MaterialButton
                    android:id="@+id/downloaderPage_pause"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_round_pause_circle_24"
                    android:fontFamily="@font/iran_sans"
                    android:padding="5dp"
                    android:text="توقف"
                    android:textSize="16sp"
                    app:backgroundTint="@color/lightGreen"
                    app:cornerRadius="10dp" />

                <com.google.android.material.button.MaterialButton
                    android:id="@+id/downloaderPage_cancel"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_round_cancel_24"
                    android:fontFamily="@font/iran_sans"
                    android:padding="5dp"
                    android:text="انصراف"
                    android:textSize="16sp"
                    app:backgroundTint="@color/pink"
                    app:cornerRadius="10dp" />

            </androidx.constraintlayout.widget.ConstraintLayout>

            <TextView
                android:id="@+id/downloaderPage_complete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="50dp"
                android:layout_marginBottom="50dp"
                android:drawableRight="@drawable/ic_round_check_circle_24"
                android:drawablePadding="10dp"
                android:drawableTint="@color/lightGreen"
                android:fontFamily="@font/iran_sans"
                android:text="با موفقیت دانلود شد"
                android:textColor="@color/lightGreen"
                android:textSize="18sp"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/downloaderPage_start" />

        </androidx.constraintlayout.widget.ConstraintLayout>

    </com.google.android.material.card.MaterialCardView>

</androidx.constraintlayout.widget.ConstraintLayout>

اگه کد بالا رو استفاده کنی، نتیجه ای مشابه زیر رو خواهی دید.

prdownloader-android-library-application-ui-دانلود-در-اندروید

نکته
این کتابخونه هیچ محدودیتی نداره که حتما توی Activity باید ازش استفاده کنی.

خیلی راحت توی FragmentDialogAdapter و … هم ازش استفاده کنی

کد مربوط به کلاس اکتیویتی

برای مدیریت کردن بخش های مختلف هم از کدهای زیر میتونی استفاده کنی.

جاواکاتلین
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) {
                               
                            }
                        });            
val downloadId = PRDownloader.download(filePath, dirPath, fileName)
                .build()
                .setOnStartOrResumeListener {}
                .setOnPauseListener {}
                .setOnCancelListener {}
                .setOnProgressListener { progress -> }
                .start(object : OnDownloadListener {
                    override fun onDownloadComplete() {}

                    override fun onError(error: com.downloader.Error?) {}
                })

بررسی تک تک بخش ها

با کد زیر میتونی مسیر فایل دانلودی و مسیر ذخیره شده رو به کتابخونه بدی.

  • filePath : مسیر فایلی که قرار هست دانلود بشه
  • dirPath : مسیر ذخیره سازی فایل در کارت حافظه
  • fileName : نام فایل ذخیره شده
val downloadId = PRDownloader.download(filePath, dirPath, fileName)

کد زیر، listener مربوط به شروع و ادامه دانلود هستش.

یعنی زمانی که فایل شروع به دانلود میکنه یا ادامه دانلود رو داری انجام میدی این کد فراخوانی میشه.

setOnStartOrResumeListener {}

کد زیر، listener مربوط به زمان توقف دانلود هستش.

یعنی زمانی که کاربر روی دکمه مکث زده باشه تا دانلود به صورت موقت متوقف بشه.

setOnPauseListener {}

کد زیر، listener مربوط به کنسل کردن دانلود هست.

یعنی زمانی که دانلود رو کنسل میکنی این بخش فراخوانی میشه.

setOnCancelListener {}

کد زیر، listener مربوط به درحال دانلود هستش.

یعنی زمانی که فایل داره دانلود میشه این بخش فراخوانی میشه.

پس میتونی حجم دانلود شده و حجم کد رو به کاربر نشون بدی.

setOnProgressListener { progress -> }

برای نشون دادن حجم دانلود شده و حجم کل فایل من از کد زیر استفاده کردم.

setOnProgressListener { progress ->
                    val progressPercent = progress.currentBytes * 100 / progress.totalBytes
                    downloaderPage_progressBar.progress = progressPercent.toInt()
                    downloaderPage_downloadSize.text = Utils.getProgressDisplayLine(progress.currentBytes, progress.totalBytes)
                }

کد زیر، listener مربوط به پایان دانلود هستش.

یعنی زمانی که دانلود با موفقیت تموم میشه یا خطا میده بخش زیر فراخوانی میشه.

start(object : OnDownloadListener {
                    override fun onDownloadComplete() {}

                    override fun onError(error: com.downloader.Error?) {}
                })

بررسی بخش های دیگه کتابخونه

مواردی که بالا اشاره کردم برای استفاده به صورت کلی هستش.

اگه میخوای یکسری استفاده های خاصی هم داشته باشی میتونی از کدهای زیر استفاده کنی.

متوقف کردن دانلود توسط کاربر

میتونی این کد رو توی کلیک یک دکمه قرار بدی تا کاربر با زدن روی اون دانلود رو متوقف کنه

PRDownloader.pause(downloadId)

ادامه دار کردن دانلود توسط کاربر

میتونی این کد رو توی کلیک یک دکمه قرار بدی تا کاربر با زدن روی اون عملیات دانلود رو ادامه بده

PRDownloader.resume(downloadId)

کنسل کردن دانلود توسط کاربر

میتونی این کد رو توی کلیک یک دکمه قرار بدی تا کاربر با زدن روی اون دانلود رو کنسل کنه

PRDownloader.cancel(downloadId)
اگه به کدهای بالا توجه کنی downloadId رو به صورت ورودی میگیرن.
downloadId رو هم توی کدهای بالا قرار دادم میتونی از اون استفاده کنی
دیدگاه‌ها ۲
ارسال دیدگاه جدید