NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:
Avatar
tknette
Člen
Avatar
tknette:3.6.2019 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ší.

Skúsil som: 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?

Chcem docieliť: 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.

 
Odpovedať
3.6.2019 13:44
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 1 správy z 1.