Android10 NetworkSpecifier 连接WiFi时遇到的诡异问题
为了兼容Android 10 Ap配网,使用了最新NetworkSpecifier 连接设备热点AP wifi,在上线灰度后,收到很多客户投诉,很多客户反馈华为手机底部不停重复弹出连接wifi 弹窗,测试后发现问题严重。
前期以为华为兼容性问题,在华为官网和论坛请求都没有满意答复。经过了几天的郁闷,突然发现为系统缓存的原因。
系统在wifi连接到设备的AP 热点后,大概过了30s,系统启动外网的检测机制,当发现该设备热点wifi无外网时,给该设备热点打上一个无外网的标签并且缓存到系统里面。当App调用API主动连接wifi名相同的热点时,系统读取到缓存认为这个wifi无网络,直接强行关闭弹窗,重新弹窗。
解决方案:手动去wifi管理页面,把缓存的相同wifi名删除掉即可
先前考虑过App内主动删除缓存的wifi,鉴于Android 高版本系统权限限制,App内无法删除用户在设置页手动连接的wifi,所以App内主动删除缓存wifi方案废弃了
如果大家有好的方案,欢迎交流
public void wifiConnect() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .setSsidPattern(new PatternMatcher("WiFi名称", PatternMatcher.PATTERN_PREFIX)) .setWpa2Passphrase("WiFi密码") .build(); NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .setNetworkSpecifier(specifier) .build(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { // do success processing here.. } @Override public void onUnavailable() { // do failure processing here.. } }; connectivityManager.requestNetwork(request, networkCallback); // Release the request when done. // connectivityManager.unregisterNetworkCallback(networkCallback); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/892220.html