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-адрес, имя файла, путь, тег, идентификатор, время в очереди, статус, прогресс, длина, скорость, последнее изменение, метаданные, errorReason, 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 (уровень API 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.