I would receive notifications when signal strength changes. I tried to create the following method and call it in the onCreate():
private void initializeWiFiListener(){
Log.i(TAG, "executing initializeWiFiListener");
String connectivity_context = Context.WIFI_SERVICE;
final WifiManager wifi = (WifiManager)getSystemService(connectivity_context);
if(!wifi.isWifiEnabled()){
if(wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING){
wifi.setWifiEnabled(true);
}
}
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
WifiInfo info = wifi.getConnectionInfo();
//TODO: implement methods for action handling
}
}, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));
}
I would appreciate if anyone could check if the method is written correctly. I tried to run the app, but haven't received any notifications and am not sure whether it is because the signal strength might be constant in the place I run debug or it is because something is missing.
Thanks!
Just to drop my solution:
in my App I have
And the onReceive in my Receiver looks like:
The idea is the to
startScan()
only every 5 seconds if the wifi is the active network.First, make sure you have
<uses-permission>
forACCESS_WIFI_STATE
in your manifest.Second, I'm not sure about notifications for a single connection, but to get notifications of everything the radio is seeing, you can start a scan:
Next, when I've received successful results, I used
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
in theIntentFilter
.Then, in the receiver, I use
getScanResults()
from theWifiManager
object, which also contains the signal strength.For stopping it this way, you simply call to
unregisterRecever()
(so you'll want to keep it around for referencing). I haven't tested myself to see if my scanning code can be modified to just check the current connection, but I do know I got plenty of results -- Wi-Fi signals change frequently and quickly. I suppose for monitoring a single connection, you can also just filter the scan results and look for the one the device is currently connected to.I hope this helps a little.