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