Android Wi-Fi连接

1、Android Q之后Wi-Fi连接要调用,如果用之前的方法无法连接对应的网络

@RequiresApi(api = Build.VERSION_CODES.Q)
    public void wifiConnectAndroidQ(String ssid, String password)
    {

            NetworkSpecifier specifier =
                    new WifiNetworkSpecifier.Builder()
                            .setSsidPattern(new PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
                            .setWpa2Passphrase(password)
                            .build();

            NetworkRequest request =
                    new NetworkRequest.Builder()
                            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                            .setNetworkSpecifier(specifier)
                            .build();

            ConnectivityManager connectivityManager = (ConnectivityManager)
                    getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

            ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    // do success processing here..
//                    Log.e("MainActivity","onavaliable:"+wifiManager.getConnectionInfo().);
                }

                @Override
                public void onUnavailable() {
                    // do failure processing here..
                }
            };
            connectivityManager.requestNetwork(request, networkCallback);
            // Release the request when done.
            // connectivityManager.unregisterNetworkCallback(networkCallback);

    }

2、AndroidQ之后判断网络是否连接

private boolean isWifiEnable() {
    ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT>=29) {
        if (cm != null) {
            NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
            boolean boo = nc != null && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
            Log.e("MainActivity","iswifienable:"+boo);
            return boo;
        } else {
            Log.e("MainActivity","iswifienable:"+false);
            return false;
        }
    } else {
        boolean boo = cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
        Log.e("MainActivity","iswifienable:"+boo);
        return boo;
    }
}

3、如果当前连接的Wi-Fi在系统Wi-Fi设置中取消保存,应用能接收到Wi-Fi变动,但是下面方法返回的ssid还是取消保存的Wi-Fi,

wifiInfo.getSSID()

需要再判断下下面是不是-1

wifiInfo.getNetworkId()

4、Android Q之后禁用三方应用打开和关闭Wi-Fi

Leave a Reply

Your email address will not be published. Required fields are marked *