android开发分享Android10 NetworkSpecifier 连接WiFi时遇到的诡异问题

Android10 NetworkSpecifier 连接WiFi时遇到的诡异问题为了兼容Android 10 Ap配网,使用了最新NetworkSpecifier 连接设备热点AP wifi,在上线灰度后,收到很多客户投诉,很多客户反馈华为手机底部不停重复弹出连接wifi 弹窗,测试后发现问题严重。前期以为华为兼容性问题,在华为官网和论坛请求都没有满意答复。经过了几天的郁闷,突然发现为系统缓存的原因。系统在wifi连接到设备的AP 热点后,大概过了30s,系统启动外网的检测机制,当发现该设备热点wi


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

(0)
上一篇 2021年10月20日
下一篇 2021年10月20日

精彩推荐