Diskuze: Handler - volá se neustále

Aktivity (3)
Avatar
tknette
Člen
Avatar
tknette:3. června 13:44

Ahoj, snažím se rozchodit handler na ověření oprávnění, ale nějak se mi nedaří zjistit, jestli v handleru takový post nemám a tak neustále přidávám další a další.

Zkusil jsem: Mám třídu HandlerWithId, která dělá z Handleru a ta by měla mít možnost zkontrolovat, jestli už tam daný post nemám, ale nejspíš to nefunguje.

import android.os.Handler
import android.os.Message

class HandlerWithID : Handler() {

    fun postDelayed(r: Runnable, runnableID: Int, delayMillis: Long): Boolean {
        val m = Message.obtain(this, r)
        m.what = runnableID
        return sendMessageDelayed(m, delayMillis)
    }

    fun post(r: Runnable, runnableID: Int): Boolean {
        return postDelayed(r, runnableID, 0)
    }

    fun hasActiveRunnable(runnableID: Int): Boolean {
        return hasMessages(runnableID)
    }
}

Tady to volám:

    private lateinit var handler: HandlerWithID

fun checkPermissionsPeriodically() {
    if(!::handler.isInitialized){
        handler = HandlerWithID()
    }
    val runnableCode = object : Runnable {
        override fun run() {
            if(!handler.hasActiveRunnable(ConstantsStorage.HANDLER_PERMISSION_ID)){
                Log.d("Handlers", "Asking for permissions")
                handler.postDelayed(this, ConstantsStorage.HANDLER_PERMISSION_ID,10000)
            }
            if(checkAndRequestPermissions()){
                Log.d("Handlers", "Got all permissions, turning off handler")
                handler.removeCallbacks(this)
            }
        }
    }
    if(!handler.hasActiveRunnable(ConstantsStorage.HANDLER_PERMISSION_ID)){
        handler.post(runnableCode, ConstantsStorage.HANDLER_PERMISSION_ID)
    }
}

Ale stejně se mi vždy v logu zobrazí Asking for permissions, i když bych čekal, že tam bude jen jednou. Tuší někdo, kde dělám chybu?

Chci docílit: Problém je, že když ty práva povolím, tak se mi tam několikrát vypíše Got all permissions, turning off handler, takže hádám, že kdybych to nechal běžet dlouho, tak se tím celá aplikace zalaguje.

 
Odpovědět 3. června 13:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.