``` return new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { wifiManager.startScan(); emitter.onNext(wifiManager.getScanResults()); } }; ``` BroadcastReceiver.onReceive always run in the UI thread, so getScanResults() and startScan still block ui thread https://stackoverflow.com/questions/5674518/does-broadcastreceiver-onreceive-always-run-in-the-ui-thread