Kotlin Multiplatform Mobile Missing Permissions

336 views Asked by At

I am currently using a platform specific ConnectivityObserver that monitors network availability. This is the platform specific code for Android:

actual class ConnectivityObserver : KoinComponent {

    private val context by inject<Context>()

    private val connectivityManager = context.getSystemService(
        ConnectivityManager::class.java
    ) as ConnectivityManager

    private val connectionFlow = callbackFlow {
        val callback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                trySend(true)
            }

            override fun onLost(network: Network) {
                super.onLost(network)
                trySend(false)
            }
        }

        connectivityManager.registerDefaultNetworkCallback(callback)
        awaitClose { connectivityManager.unregisterNetworkCallback(callback) }
    }

    actual fun observeConnection() = connectionFlow
}

I added permissions inside androidApp module (not androidMain inside shared code):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        ...
    </application>
</manifest> 

However, when trying to build on CI, the build fails with the following error message:

Missing permissions required by ConnectivityManager.registerDefaultNetworkCallback: android.permission.ACCESS_NETWORK_STATE [MissingPermission]
    private val connectionFlow = callbackFlow {

I tried adding a manifest with the permissions to the shared androidMain module, without luck. Thanks!

0

There are 0 answers