赞
踩
android 11 的板子(硬件跟驱动都是自己公司的)上开发一款app,该app有WIFI相关的操作开发(实现WIFI扫描列出WiFi列表、点击保存过的WiFi进行连接、输入密码连接新WiFI、删除已连接的WiFi)。
1)调用WiFi相关的网络操作方法removeNetwork()、reassociate()、enableNetwork()、disableNetwork()、reconnect() 和 disconnect(),这些方法无效。
2)使用WifiNetworkSuggestion时,即使平台接受你的建议(方法返回WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS),也不会进行切换或者连接新的WiFi,
即无法实现项目对网络切换、连接等操作的需求。
第一种:将你的App升级为系统APP。原理:APP权限升级,此时WiFi相关的api调用是可以的,但这种方式实现相对比较复杂,设备需要权限,如果你是自己的板子可以这样操作,若果不是,此方法可能行不通。
第二种:将你的targetSdkVersion设置为28,即targetSdkVersion=28即可。原理:高版本会适配低版本,这个时候即使你的app运行在10、11、12、13系统上,WiFi相关的api调用仍然跟之前的版本(10.0以下的版本)相同,但此时一些运行时权限可能要进行更改,这个权限要视实际项目开发来看。
上述两种方式我都在项目中测试过,可以实现android 11 的板子上进行WIFI操作开发(实现WIFI扫描列出WiFi列表、点击保存过的WiFi进行连接、输入密码连接新WiFI、删除已连接的WiFi)需求。
1)对启用和停用 WLAN 实施了限制
以 Android 10 或更高版本为目标平台的应用无法启用或停用 WLAN。WifiManager.setWifiEnabled() 方法始终返回 false。
如果您需要提示用户启用或停用 WLAN,请使用设置面板。
对直接访问已配置的 WLAN 网络实施了限制
为了保护用户隐私,只有系统应用和设备政策控制器 (DPC) 支持手动配置 WLAN 网络列表。给定 DPC 可以是设备所有者,也可以是资料所有者。
如果应用以 Android 10 或更高版本为目标平台,并且应用不是系统应用或 DPC,则下列方法不会返回有用数据:getConfiguredNetworks() 方法始终返回空列表。
注意:如果运营商应用调用 getConfiguredNetworks(),则系统返回的列表仅包含运营商配置的网络。
每个返回整数值的网络操作方法(addNetwork() 和 updateNetwork())始终返回 -1。
每个返回布尔值的网络操作(removeNetwork()、reassociate()、enableNetwork()、disableNetwork()、reconnect() 和 disconnect())始终返回 false。
2)运行 Android 10 (API 级别 29) 或更高版本 的设备允许您的应用添加设备的网络凭据,以自动连接到 WLAN 接入点。
您可以使用 WifiNetworkSuggestion 就连接到哪个网络提供建议。平台最终会根据您的应用和其他应用的建议,选择要接受的接入点。
但实际中如果用WifiNetworkSuggestion ,即使平台接受你的建议,也不会进行切换或者连接新的WiFi。平台只是接受你的应用建议,
但并不一定会使用,所以这个不符合需求开发。如果用老的api,每个返回布尔值的网络操作(removeNetwork()、reassociate()、enableNetwork()、disableNetwork()、reconnect() 和 disconnect())始终返回 false。
也不符合需求开发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。