Можно ли конвертировать BroadcastReceiver в сопрограммы? - PullRequest
0 голосов
/ 02 января 2019

Я недавно выучил Coroutines, и я изо всех сил стараюсь воплотить его во все.

Я узнал, что вы можете преобразовать обратный вызов в coroutine.

Возможно липреобразовать Broadcast Receiver в coroutines с помощью suspendCoroutine?

Как мне это сделать?

1 Ответ

0 голосов
/ 12 июня 2019

Вот один из способов (любезно предоставлен Леонардкрамер и этот ответ ):

suspend fun Context.getCurrentScanResults(): List<ScanResult> {
    val wifiManager = getSystemService(Context.WIFI_SERVICE) as? WifiManager ?: return listOf()
    return suspendCancellableCoroutine { continuation ->
        val wifiScanReceiver = object : BroadcastReceiver() {
            override fun onReceive(c: Context, intent: Intent) {
                if (intent.action == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) {
                    unregisterReceiver(this)
                    continuation.resume(wifiManager.scanResults)
                }
            }
        }
        continuation.invokeOnCancellation {
            unregisterReceiver(wifiScanReceiver)
        }
        registerReceiver(wifiScanReceiver, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
        wifiManager.startScan()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...