Как реализовать ContentObserver в kotlin для мониторинга прогресса загрузки DownloadManager? - PullRequest
0 голосов
/ 24 февраля 2019

Я выбираю «способ DownloadManager», чтобы управлять загрузкой приложения, которое я создаю. Я видел, что есть и другие методы, такие как AsyncTask, однако я мог столкнуться и с огромными загрузками, и мне казалось, что DownloadManager может быть проще(Я новичок в kotlin и Android), чем реализация собственного загрузочного рудника, управляющего потоками.Но теперь я застрял в том, что не знаю, как передать прогресс загрузки в индикатор выполнения в моем представлении.Конечно, сначала я должен получить данные о прогрессе, контролирующие загрузку;Я нашел решение, которое включает в себя создание ContentObserver.Я "перевел" это с Java на Kotlin, однако ... Я не понимаю, как и что я должен передать как Handler

Вот код внутри моего пользовательского класса DownloadManager

var Download_Uri = android.net.Uri.parse(myUrl)

val request = DownloadManager.Request(Download_Uri)
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
request.setAllowedOverRoaming(false)

request.setTitle("$myTitle$myExtensionVar" + myTitle + myExtensionVar)
request.setDescription("Downloading " + myTitle + myExtensionVar)
request.setVisibleInDownloadsUi(true) //actually this doesn't work at all
request.setDestinationInExternalPublicDir(
    android.os.Environment.DIRECTORY_DOWNLOADS,
  "/" + myTitle + myExtensionVar
)

var refid:Long = downloadManager.enqueue(request)

// have I also to insert a while loop? Is creating a Thread for this right? I cannot find a really useful guide (for totally noobs) about threading...
Thread(Runnable {

    context.getContentResolver().registerContentObserver(Download_Uri, true, DownloadObserver(null)) // i put null cause I don't know what to insert here

}).start()

И вот мой код в моем классе DownloadObserver:

// i put a constructor to be able to pass also a null as "handler", I don't know if it's right, plus I don't know what to pass as handler object!
public class DownloadObserver constructor(var handler:Handler?): ContentObserver(handler) {

override fun onChange(selfChange: Boolean, uri: Uri) {
    Log.d("DownloadObserver", "my download at " + uri + " is updated...");
}

}

Я вставил некоторые другие подвопросы в качестве комментариев внутри кода.

Заранее спасибо и наилучшими пожеланиями!:)

...