问题描述
直到API等级29,我们一直在使用WifiConfiguration与我们的DPC(设备和配置文件所有者模式)建立wifi连接。从API lvl 29开始,我们仍然可以保存Open,WEP,WPA网络,但是保存EAP网络的任何尝试都将被完全忽略。我们尝试使用WifiSuggestions方法,该建议已正确显示在通知栏中,但是当用户点击“允许”时,则没有任何反应。日志中没有错误,addNetworkSuggestions()方法返回STATUS_NETWORK_SUGGESTIONS_SUCCESS。
仅当向我们的DPC提供设备/配置文件所有者权限并具有完整的配置过程(在首次启动过程中创建工作配置文件或对其进行完全管理)时,才存在此问题。使用ADB获取设备所有者的状态可以通过允许网络建议来保存网络。
这是我们设置网络建议的方式:
@RequiresApi(api = Build.VERSION_CODES.Q)
public static WifiNetworkSuggestion setupWifiNetworkSuggestion (WifiConfiguration wifiConfiguration){
return new WifiNetworkSuggestion.Builder()
.setSsid(wifiConfiguration.SSID)
.setIsHiddenSsid(wifiConfiguration.hiddenSSID)
.setWpa2EnterpriseConfig(wifiConfiguration.enterpriseConfig)
.build();
}
之后,我们致电:
List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>();
networkSuggestionList.add(setupWifiNetworkSuggestion(wifiConfiguration));
int status = mWifiManager.addNetworkSuggestions(networkSuggestionList);
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
_logger.error("Problem adding network suggestion,status code: " + status);
}
我们错过了什么吗?相同的代码在我们不使用emm设置获取设备所有者的其他应用程序中也有效。两个应用程序中所有请求的权限都相同。我们试图获取一些错误信息或设置一些日志,但始终只能获得成功状态。
解决方法
我们终于成功了!该问题是由三个独立的问题引起的:
-
我们缺少允许的密钥管理设置
WifiConfiguration.KeyMgmt.WPA_EAP
-
当企业配置中提供任何域时,我们的测试RADIUS服务器将拒绝连接尝试。即使在解决Android方面的问题时,它也给我们带来了不必要的断开连接
-
最重要:由于某些原因,我们的密码策略未得到实施,并且在测试环境中,我们使用自签名证书。如果没有在设备上至少设置PIN锁,则证书无法附加到网络配置文件,因此无法添加/连接证书。即使网络已保存,它也缺少必须手动选择的证书(尽管已正确部署到证书存储中)