Ketch ist eine einfache, leistungsstarke und anpassbare Datei-Downloader-Bibliothek für Android, die vollständig in Kotlin erstellt wurde. Es vereinfacht den Prozess des Herunterladens von Dateien in Android-Anwendungen, indem es die Leistungsfähigkeit von WorkManager nutzt. Ketch garantiert den Download unabhängig vom Anwendungsstatus.
Um die Ketch-Bibliothek in Ihr Android-Projekt zu integrieren, befolgen Sie diese einfachen Schritte:
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
}
Einfachste Art, Ketch zu verwenden:
Erstellen Sie die Instanz von Ketch in der Anwendung onCreate. (Ketch ist eine Singleton-Klasse und die Instanz wird bei der ersten Verwendung automatisch erstellt.)
private lateinit var ketch : Ketch
override fun onCreate () {
super .onCreate()
ketch = Ketch .builder().build( this )
}
Rufen Sie die Funktion download() auf, übergeben Sie die URL, den Dateinamen und den Pfad und beobachten Sie den Download-Status
val id = ketch.download(url, fileName, path)
lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloadById(id)
.flowOn( Dispatchers . IO )
.collect { downloadModel ->
// use downloadModel
}
}
}
Um den Download abzubrechen
ketch.cancel(downloadModel.id) // other options: cancel(tag), cancelAll()
Um den Download anzuhalten
ketch.pause(downloadModel.id) // other options: pause(tag), pauseAll()
Um den Download fortzusetzen
ketch.resume(downloadModel.id) // other options: resume(tag), resumeAll()
Um den Download erneut zu versuchen
ketch.retry(downloadModel.id) // other options: retry(tag), retryAll()
Um den Download zu löschen
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)
Beobachten: Stellt den Statusfluss von Download-Elementen bereit (Jedes Element enthält Download-Informationen wie URL, Dateiname, Pfad, Tag, ID, Zeit in der Warteschlange, Status, Fortschritt, Länge, Geschwindigkeit, letzte Änderung, Metadaten, Fehlerursache, eTag)
// To observe from Fragment
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloads()
.flowOn( Dispatchers . IO )
.collect {
// set items to adapter
}
}
}
So aktivieren Sie die Benachrichtigung:
Fügen Sie die Benachrichtigungsberechtigung in der Manifestdatei hinzu.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
Berechtigung vom Benutzer anfordern (erforderlich ab Android 13 (API-Level 33)). Schauen Sie sich als Referenz die Beispiel-App an.
Übergeben Sie die Benachrichtigungskonfiguration während der Initialisierung
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 )
Stellen Sie Header mit Netzwerkanfragen bereit.
ketch.download(url, fileName, path,
headers = headers, // Default: Empty hashmap
)
Tag: Gruppieren Sie verschiedene Downloads, indem Sie zusätzliche Tags bereitstellen. (Dieses Tag kann auch zum Abbrechen, Anhalten, Fortsetzen und Löschen des Downloads verwendet werden.)
ketch.download(url, fileName, path,
tag = tag, // Default: null
)
Konfiguration herunterladen: Bietet benutzerdefiniertes Verbindungs- und Lese-Timeout
ketch = Ketch .builder().setDownloadConfig(
config = DownloadConfig (
connectTimeOutInMs = 20000L , // Default: 10000L
readTimeOutInMs = 15000L // Default: 10000L
)
).build( this )
Benutzerdefiniertes OKHttp: Stellt einen benutzerdefinierten okhttp-Client bereit
ketch = Ketch .builder().setOkHttpClient(
okHttpClient = OkHttpClient
. Builder ()
.connectTimeout( 10000L )
.readTimeout( 10000L )
.build()
).build( this )
Benachrichtigungskonfiguration: Stellen Sie eine benutzerdefinierte Benachrichtigungskonfiguration bereit
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 )
Schauen Sie sich den Blog an, um die Funktionsweise von Ketch (High Level Design) zu verstehen: https://medium.com/@khush.panchal123/ketch-android-file-downloader-library-7369f7b93bd1
Sie können gerne Feedback geben, ein Problem melden oder zu Ketch beitragen. Gehen Sie zum GitHub-Repository, erstellen Sie ein Problem oder suchen Sie das ausstehende Problem. Alle Pull-Anfragen sind willkommen?
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.