Ketch é uma biblioteca de download de arquivos simples, poderosa e personalizável para Android, construída inteiramente em Kotlin. Ele simplifica o processo de download de arquivos em aplicativos Android, aproveitando o poder do WorkManager. Ketch garante o download independentemente do estado do aplicativo.
Para integrar a biblioteca Ketch ao seu projeto Android, siga estas etapas simples:
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
}
Maneira mais simples de usar o Ketch:
Crie a instância do Ketch no aplicativo onCreate. (Ketch é uma classe singleton e a instância será criada automaticamente no primeiro uso)
private lateinit var ketch : Ketch
override fun onCreate () {
super .onCreate()
ketch = Ketch .builder().build( this )
}
Chame a função download(), passe a url, fileName, caminho e observe o status do download
val id = ketch.download(url, fileName, path)
lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloadById(id)
.flowOn( Dispatchers . IO )
.collect { downloadModel ->
// use downloadModel
}
}
}
Para cancelar o download
ketch.cancel(downloadModel.id) // other options: cancel(tag), cancelAll()
Para pausar o download
ketch.pause(downloadModel.id) // other options: pause(tag), pauseAll()
Para retomar o download
ketch.resume(downloadModel.id) // other options: resume(tag), resumeAll()
Para tentar novamente o download
ketch.retry(downloadModel.id) // other options: retry(tag), retryAll()
Para excluir o download
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)
Observação: fornece fluxo de estado dos itens de download (cada item carrega informações de download como url, fileName, caminho, tag, id, timeQueued, status, progresso, comprimento, velocidade, lastModified, metaData, failedReason, eTag)
// To observe from Fragment
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle( Lifecycle . State . STARTED ) {
ketch.observeDownloads()
.flowOn( Dispatchers . IO )
.collect {
// set items to adapter
}
}
}
Para ativar a notificação:
Adicione a permissão de notificação no arquivo de manifesto.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
Solicitar permissão do usuário (exigido no Android 13 (nível 33 da API)). Confira o aplicativo de exemplo para referência.
Passe a configuração de notificação durante a inicialização
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 )
Fornece cabeçalhos com solicitação de rede.
ketch.download(url, fileName, path,
headers = headers, // Default: Empty hashmap
)
Tag: Agrupe vários downloads fornecendo uma tag adicional. (Esta tag também pode ser usada para cancelar, pausar, retomar e excluir o download)
ketch.download(url, fileName, path,
tag = tag, // Default: null
)
Baixar configuração: fornece tempo limite personalizado de conexão e leitura
ketch = Ketch .builder().setDownloadConfig(
config = DownloadConfig (
connectTimeOutInMs = 20000L , // Default: 10000L
readTimeOutInMs = 15000L // Default: 10000L
)
).build( this )
OKHttp personalizado: fornece cliente okhttp personalizado
ketch = Ketch .builder().setOkHttpClient(
okHttpClient = OkHttpClient
. Builder ()
.connectTimeout( 10000L )
.readTimeout( 10000L )
.build()
).build( this )
Configuração de notificação: fornece configuração de notificação personalizada
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 )
Confira o blog para entender o funcionamento do Ketch (High Level Design): https://medium.com/@khush.panchal123/ketch-android-file-downloader-library-7369f7b93bd1
Sinta-se à vontade para fornecer feedback, relatar um problema ou contribuir com o Ketch. Acesse o repositório GitHub, crie um problema ou encontre o problema pendente. Todas as solicitações pull são bem-vindas?
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.