Android WIFI如何在特定WIFI连接可用时检测

ECH*_*030 27 android wifi

我需要检测何时与特定WIFI网络建立网络连接.

例如:一旦你走进你的房子,你的手机拿起你的家庭WiFi网络,我想要一条通知说"你不在你的家庭网络,你想连接到你家吗?" 但我希望这只会发生在我特定的房子里.

我应该注意什么,我应该做些什么测试来确保它是我的特定家庭网络,而不是另一个网络?

pet*_*syn 28

您可以使用BroadcastReceiver找出wifi网络已更改:

BroadcastReceiver broadcastReceiver = new WifiBroadcastReceiver();

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
context.registerReceiver(broadcastReceiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)

BroadcastReceiver可能看起来像这样.要检查特定的MAC地址,请参阅下面的checkConnectedToDesiredWifi()方法.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*era 12

长期以来,因为我们不像你需要的代码,对于免费服务,我只能推荐你,在创建这样的应用程序时,阅读有关Android及其网络/ Wifi可能性的一切可能性.

  • 你应该阅读和研究的资料来源

http://developer.android.com/reference/android/net/wifi/package-summary.html
如何在android中连接wifi
如何在我当前的android系统中获取我的wifi热点ssid
如何获取wifi的名称 - 使用android API的android网络?
在Android上获取Wifi接口名称

  • 创建应用程序清单时应该要求的权限

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

(最后一个,只有当你想让它检测你的位置时,才能防止不必要的通话)

  • 您还应该声明,您的应用程序需要wifi才能在设备中使用,才能正常工作:

AndroidManifest.xml

<uses-feature android:name="android.hardware.wifi" />
Run Code Online (Sandbox Code Playgroud)