安卓WIFI如何检测当具体WIFI连接可用具体、WIFI

2023-09-12 09:17:32 作者:苏格拉没有底?

我需要检测时,我通过网络连接到一个特定的WIFI网络。

I need to detect when I have network connectivity to a SPECIFIC WIFI network.

例如:当你走进你的房子,你的手机拿起你的家庭WiFi网络,我想一个通知,上面写着你是不是在你家的网络,你想连接到您? 但我想这只有当我在我的具体的房子发生了。

For example: As soon as you walk into your house, and your phone picks up your home WiFi network, I would like a notification that says "You are not at your home network, would you like to connect to you Home?" But I would like that to only happen when I am at my specific house.

我应该听我应该做的测试,以确保它是我的具体的家庭网络,而不是其他的网络?

What should I listen for and what tests should I do to make sure it is my specific home network, and not another network?

推荐答案

您可以使用的BroadcastReceiver地发现,WIFI网络已经改变了:

You can use BroadcastReceiver to find out that wifi network has changed:

BroadcastReceiver broadcastReceiver = new WifiBroadcastReceiver();

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
context.registerReceiver(broadcastReceiver, intentFilter);

该BroadcastReceiver的可能是这样的。 并检查特定MAC地址见checkConnectedToDesiredWifi()方法的波纹管。

The BroadcastReceiver may look like this. And to check for specific MAC address see the checkConnectedToDesiredWifi() method bellow.

public class WifiBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION .equals(action)) {
            SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
            if (SupplicantState.isValidState(state) 
                    && state == SupplicantState.COMPLETED) {

                boolean connected = checkConnectedToDesiredWifi();
            }
        }
    }

    /** Detect you are connected to a specific network. */
    private boolean checkConnectedToDesiredWifi() {
        boolean connected = false;

        String desiredMacAddress = "router mac address";

        WifiManager wifiManager = 
            (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

        WifiInfo wifi = wifiManager.getConnectionInfo();
        if (wifi != null) {
            // get current router Mac address
            String bssid = wifi.getBSSID();
            connected = desiredMacAddress.equals(bssid);
        }

        return connected;
    }
}