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:
privatelateinitvar handler: HandlerWithID
fun checkPermissionsPeriodically() {
if(!::handler.isInitialized){
handler = HandlerWithID()
}
val runnableCode = object : Runnable {
overridefun 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.
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.