Ketch عبارة عن مكتبة تنزيل ملفات بسيطة وقوية وقابلة للتخصيص لنظام Android ومبنية بالكامل في Kotlin. فهو يبسط عملية تنزيل الملفات في تطبيقات Android من خلال الاستفادة من قوة WorkManager. يضمن Ketch التنزيل بغض النظر عن حالة التطبيق.
لدمج مكتبة Ketch في مشروع Android الخاص بك، اتبع الخطوات البسيطة التالية:
dependencyResolutionManagement {
repositoriesMode . set( RepositoriesMode . FAIL_ON_PROJECT_REPOS )
repositories {
google()
mavenCentral()
maven { url ' https://jitpack.io ' } // this one
}
}
dependencies {
implementation ' com.github.khushpanchal:Ketch:2.0.2 ' // Use latest available version
}
أبسط طريقة لاستخدام Ketch:
قم بإنشاء مثيل Ketch في التطبيق onCreate. (Ketch عبارة عن فئة مفردة وسيتم إنشاء المثيل تلقائيًا عند الاستخدام الأول)
private lateinit var ketch : Ketch
override fun onCreate () {
super .onCreate()
ketch = Ketch .builder().build( this )
}
اتصل بوظيفة download()، وقم بتمرير عنوان url واسم الملف والمسار ولاحظ حالة التنزيل
val id = ketch.download(url, fileName, path)
lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloadById(id)
.flowOn( Dispatchers . IO )
.collect { downloadModel ->
// use downloadModel
}
}
}
لإلغاء التنزيل
ketch.cancel(downloadModel.id) // other options: cancel(tag), cancelAll()
لإيقاف التنزيل مؤقتًا
ketch.pause(downloadModel.id) // other options: pause(tag), pauseAll()
لاستئناف التحميل
ketch.resume(downloadModel.id) // other options: resume(tag), resumeAll()
لإعادة محاولة التنزيل
ketch.retry(downloadModel.id) // other options: retry(tag), retryAll()
لحذف التحميل
ketch.clearDb(downloadModel.id) // other options: clearDb(tag), clearAllDb(), clearDb(timeInMillis)
ketch.clearDb(downloadModel.id, false ) // Pass "false" to skip the actual file deletion (only clear entry from DB)
الملاحظة: توفر تدفق حالة عناصر التنزيل (يحتوي كل عنصر على معلومات التنزيل مثل عنوان url واسم الملف والمسار والعلامة والمعرف وtimeQueued والحالة والتقدم والطول والسرعة وآخر تعديل وبيانات التعريف وسبب الفشل وeTag)
// To observe from Fragment
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloads()
.flowOn( Dispatchers . IO )
.collect {
// set items to adapter
}
}
}
لتمكين الإخطار:
أضف إذن الإعلام في ملف البيان.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
طلب إذن من المستخدم (مطلوب من Android 13 (مستوى واجهة برمجة التطبيقات 33)). تحقق من نموذج التطبيق للرجوع إليه.
قم بتمرير تكوين الإشعارات أثناء التهيئة
ketch = Ketch .builder().setNotificationConfig(
config = NotificationConfig (
enabled = true ,
smallIcon = R .drawable.ic_launcher_foreground // It is required to pass the smallIcon for notification.
)
).build( this )
توفير رؤوس مع طلب الشبكة.
ketch.download(url, fileName, path,
headers = headers, // Default: Empty hashmap
)
العلامة: قم بتجميع التنزيلات المتنوعة من خلال توفير علامة إضافية. (يمكن استخدام هذه العلامة لإلغاء التنزيل أو إيقافه مؤقتًا أو استئنافه أو حذفه أيضًا)
ketch.download(url, fileName, path,
tag = tag, // Default: null
)
تنزيل التكوين: يوفر اتصالًا مخصصًا ومهلة للقراءة
ketch = Ketch .builder().setDownloadConfig(
config = DownloadConfig (
connectTimeOutInMs = 20000L , // Default: 10000L
readTimeOutInMs = 15000L // Default: 10000L
)
).build( this )
OKHttp مخصص: يوفر عميل okhttp مخصص
ketch = Ketch .builder().setOkHttpClient(
okHttpClient = OkHttpClient
. Builder ()
.connectTimeout( 10000L )
.readTimeout( 10000L )
.build()
).build( this )
تكوين الإخطار: توفير تكوين الإخطار المخصص
ketch = Ketch .builder().setNotificationConfig(
config = NotificationConfig (
enabled = true , // Default: false
channelName = channelName, // Default: "File Download"
channelDescription = channelDescription, // Default: "Notify file download status"
importance = importance, // Default: NotificationManager.IMPORTANCE_HIGH
smallIcon = smallIcon, // It is required
showSpeed = true , // Default: true
showSize = true , // Default: true
showTime = true // Default: true
)
).build( this )
راجع المدونة لفهم عمل Ketch (التصميم عالي المستوى): https://medium.com/@khush.panchal123/ketch-android-file-downloader-library-7369f7b93bd1
لا تتردد في تقديم تعليقات أو الإبلاغ عن مشكلة أو المساهمة في Ketch. توجه إلى مستودع GitHub، أو قم بإنشاء مشكلة أو ابحث عن المشكلة المعلقة. جميع طلبات السحب هي موضع ترحيب؟
Copyright (C) 2024 Khush Panchal
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.