Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WorkManager version, WAKE_LOCK permission and Chucker Library #603

Closed
GJean opened this issue Apr 10, 2024 · 5 comments
Closed

WorkManager version, WAKE_LOCK permission and Chucker Library #603

GJean opened this issue Apr 10, 2024 · 5 comments

Comments

@GJean
Copy link

GJean commented Apr 10, 2024

Hello,

I have a problem with the MQTT library. I tried with version 4.2.4 and version 4.3Beta1. When I try to launch a connection I get an error on the WAKE_LOCK permission.

I don't understand is that with this new version you don't use the foreground service but the wok manager. So I don't understand why the library is asking me for this permission.

FATAL EXCEPTION: main
Process: com.idethic.idego.wallet, PID: 10683
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4200010 (has extras) } in info.mqtt.android.service.MqttService$NetworkConnectionIntentReceiver@99baace
       at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1926)
      at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2)
      at android.os.Handler.handleCallback(Handler.java:942)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:240)
      at android.os.Looper.loop(Looper.java:351)
      at android.app.ActivityThread.main(ActivityThread.java:8423)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Caused by: java.lang.SecurityException: Neither user 10617 nor current process has android.permission.WAKE_LOCK.
      at android.os.Parcel.createExceptionOrNull(Parcel.java:3040)
      at android.os.Parcel.createException(Parcel.java:3024)
      at android.os.Parcel.readException(Parcel.java:3007)
      at android.os.Parcel.readException(Parcel.java:2949)
      at android.os.IPowerManager$Stub$Proxy.acquireWakeLock(IPowerManager.java:1188)
      at android.os.PowerManager$WakeLock.acquireLocked(PowerManager.java:3070)
      at android.os.PowerManager$WakeLock.acquire(PowerManager.java:3052)
      at info.mqtt.android.service.MqttService$NetworkConnectionIntentReceiver.onReceive(MqttService.kt:659)
      at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1888)
      at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2) 
      at android.os.Handler.handleCallback(Handler.java:942) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loopOnce(Looper.java:240) 
      at android.os.Looper.loop(Looper.java:351) 
      at android.app.ActivityThread.main(ActivityThread.java:8423) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013Caused by: android.os.RemoteException: Remote stack trace:
      at android.app.ContextImpl.enforce(ContextImpl.java:2260)
      at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2288)
      at com.android.server.power.PowerManagerService$BinderService.acquireWakeLock(PowerManagerService.java:6141)
      at android.os.IPowerManager$Stub.onTransact(IPowerManager.java:571)
      at android.os.Binder.execTransactInternal(Binder.java:1326)

I created a blank project and integrated the library. It works and connects to my MQTT server.
For the moment I can't share the code of my Android App. I've been searching for 24 hours on this problem but I can't find anything, so I've come to ask for your help.

To make it easier to test the problem, I put the code in the MainActivity in the onCreate.

val coturnConfig =
            CoturnConfig("stunHost", "turnHost", CoturnCredentials("username", "password"))
        val brokerTopology =
            BrokerTopology("clientId", "browserTopic", "userDeviceTopic", "answerAuthenticateTopic")
        val idegoSession = IdegoSession(
            sessionId = "test",
            sessionType = IdegoSessionType.CERTIFICATION_SESSION,
            userName = "username",
            password = "password".toCharArray(),
            coturnConfig = coturnConfig,
            brokerTopology = brokerTopology,
            id = "id",
            created = LocalDateTime.now(),
            updated = LocalDateTime.now()
        )
        val wakeUpSignal = WakeUpSignal(
            idegoSession,
            "ssl://test.mosquitto.org:8883",
            WakeUpSignalType.CERTIFICATION
        )
        val mqttCallback = object : MqttCallback {
            override fun connectionLost(cause: Throwable?) {
                Timber.tag("MQTT").d("ConnectionLost")
            }

            override fun messageArrived(topic: String?, message: MqttMessage?) {
                Timber.tag("MQTT").d("Topic : $topic -> message : ${message.toString()}")
            }

            override fun deliveryComplete(token: IMqttDeliveryToken?) {
                Timber.tag("MQTT").d("Delivery Complete : ${token.toString()}")
            }

        }
        val iMqttActionListener = object : IMqttActionListener {
            override fun onSuccess(asyncActionToken: IMqttToken?) {
                Timber.tag("MQTT").d("onSuccess")
            }

            override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
                Timber.tag("MQTT").d("plopError")
                Timber.tag("MQTT").d(exception, "onFailure")
            }

        }
        val mqttAndroidClient = MqttAndroidClient(
            this.applicationContext,
            wakeUpSignal.mqttServerUri,
            UUID.randomUUID().toString()
        )
        mqttAndroidClient.setTraceEnabled(true)
        mqttAndroidClient.setTraceCallback(object : MqttTraceHandler {
            override fun traceDebug(message: String?) {
                Timber.tag("MQTT").d("traceDebug : $message")
            }

            override fun traceError(message: String?) {
                Timber.tag("MQTT").d("traceError : $message")
            }

            override fun traceException(message: String?, e: Exception?) {
                Timber.tag("MQTT").d(e, "traceException : $message")
            }

        })
        mqttAndroidClient.setCallback(mqttCallback)
        val mqttConnectOptions = MqttConnectOptions()
        mqttConnectOptions.isAutomaticReconnect = true
        mqttConnectOptions.isCleanSession = false
        mqttAndroidClient.connect(mqttConnectOptions, null, iMqttActionListener)
@hannesa2
Copy link
Owner

You could investigate, if resulting apk comes with this permission. The library should add it automatically to your apk (or you remove it explicit)

image

@GJean
Copy link
Author

GJean commented Apr 11, 2024

Thanks for your help. Yes the library add it automatically but with android:maxSdkVersion="25"
Capture d’écran du 2024-04-11 11-12-57

I don't know why he add this maxSdkVersion

@GJean
Copy link
Author

GJean commented Apr 11, 2024

I find...

I must add in my AndroidManifest

<uses-permission
        android:name="android.permission.WAKE_LOCK"
        tools:node="replace" />

Because I use Chucker

https://stackoverflow.com/questions/77259367/workmanager-on-android-11-causes-securityexception-missing-wake-lock-permission

and the issue

Thanks for your help

@GJean GJean changed the title WorkManager version and WAKE_LOCK permission WorkManager version, WAKE_LOCK permission and Chucker Library Apr 11, 2024
@hannesa2
Copy link
Owner

Is it now solved for you ?

@GJean
Copy link
Author

GJean commented Apr 11, 2024

Yes it's solved

@GJean GJean closed this as completed Apr 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants