我也遇到了同样的问题.我在广播接收器的帮助下解决了它并围绕它构建了我自己的逻辑.
广播接收器类,确保在清单中提供权限ACCESS_WIFI_STATE和CHANGE_WIFI_STATE.
public class WifiChecker extends BroadcastReceiver {
private OnWifiResultArrived onWifiResultArrived = null;
private static boolean CAN_CALL_AGAIN = true;
private WifiManager wifiManager;
/**
* @param context context of activity.
* Remember to provide permission
*
* {@code },
* {@code }
*/
@SuppressLint("MissingPermission")
public WifiChecker(Context context) {
CAN_CALL_AGAIN = true;
wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
context.registerReceiver(this, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager.startScan();
rerunAgain();
}
private void rerunAgain() {
new Handler().postDelayed(new Runnable() {
@SuppressLint("MissingPermission")
@Override
public void run() {
if (CAN_CALL_AGAIN)
wifiManager.startScan();
rerunAgain(); //rerun the broadcast again
}
}, 1000);
}
public void addListerForWifiCallback(OnWifiResultArrived onWifiResultArrived) {
this.onWifiResultArrived = onWifiResultArrived;
}
@SuppressLint("MissingPermission")
@Override
public void onReceive(Context context, Intent intent) {
updateUi(wifiManager.getScanResults());
}
private void updateUi(final List scanResults) {
try {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
try {
if (onWifiResultArrived != null)
onWifiResultArrived.isInWifiRange(scanResults);
} catch (Exception e) {
e.printStackTrace();
}
}
}, 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
public void unregisterListner(Context context) {
this.onWifiResultArrived = null;
CAN_CALL_AGAIN = false;
}
public interface OnWifiResultArrived {
void isInWifiRange(List scanResults);
}
}
广播课的用户
实现广播接收器类接口,即OnWifiResultArrived
WifiChecker checker = new WifiChecker(this);
checker.addListerForWifiCallback(this);
@Override
public void isInWifiRange(List scanResults){
//get your BSSID here
scanResults.get(position).BSSID;
//write your logic for checking weather it is connected or not
}
要么
WifiChecker checker = new WifiChecker(this);
checker.addListerForWifiCallback(@Override
public void isInWifiRange(List scanResults){
//get your BSSID here
scanResults.get(position).BSSID;
//write your logic for checking weather it is connected or not
});