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!