Description
I'm using ReactiveWifiLocal.observeWifiAccessPoints(context)
everything works well except that I'm receiving too much events, and it is causing high cpu load, lags and battery drain.
I can handle it partially by using .throttleFirst(SAMPLING_TIME, TimeUnit.SECONDS)
but anyway the library it-selves receives callbacks in BroadcastReceiver
I suggest to do something like
public static Observable<List<ScanResult>> observeWifiAccessPoints(final Context context,final int scanInterval) {
final WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan(); // without starting scan, we may never receive any scan results
final IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
return Observable.create(new Observable.OnSubscribe<List<ScanResult>>() {
@Override
public void call(final Subscriber<? super List<ScanResult>> subscriber) {
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
AndroidSchedulers.mainThread().createWorker().schedule(new Action0() {
@Override
public void call() {
wifiManager.startScan(); // we need to start scan again to get fresh results ASAP
}
}, scanInterval, TimeUnit.SECONDS);
subscriber.onNext(wifiManager.getScanResults());
}
};
context.registerReceiver(receiver, filter);
subscriber.add(unsubscribeInUiThread(new Action0() {
@Override
public void call() {
context.unregisterReceiver(receiver);
}
}));
}
});
}
This is how often I get updates:
10-30 13:31:29.051 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.118 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.159 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.199 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.304 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.358 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.396 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.426 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.465 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.499 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.538 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.580 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items
10-30 13:31:29.626 28695-28695/br.com.oitchau D/WiFiListener: mark as available 8 items