RK-Android15-WIFI白名单功能实现
实现WIFI白名单功能 。 三个模式: 1、默认模式:允许搜索所有的WIFI显示、搜索出来 ; 2、禁用模式:允许所有WIFI显示,能够搜索出来 ;3、白名单模式:允许指定WIFI名单显示,被搜索出来
文章目录
- 前言-需求
- 一、参考资料
- 二、核心修改文件和实现方式
-
- 1、修改文件
-
- 疑问思考
- 2、实现方式
-
- a)新增四个属性
- b)IWifiManager.aidl 接口添加
- c)BaseWifiService 接口实现
- d)WifiServiceImpl - WIFI服务实现类
-
- 提供白名单集合供外部访问
- 构造方法里面新增赋值集合逻辑
- getScanResults 新增过滤逻辑
- e) WifiManager 新增对外WIFI白名单集合设置和获取功能
- f) BaseWifiTracker-Scanner 系统第一次搜索过滤拦截
- g)ScanResultUpdater 更新WIFI 列表过滤
- h) ScanResultUpdater 过滤wifi 列表
- 三、测试验证
- 总结
前言-需求
实现:WIFI白名单功能,默认显示所有、可以禁用WIFI列表展示、编辑白名单WIFI可以显示出来
可以参考 RKAndroid11-WIFI白名单功能实现,版本区别部分代码路径和源码不一样,可参考。但是RKAndroid11上面只是给了一个思路,具体实现还得自己细化实现。
一、参考资料
RKAndroid11-WIFI白名单功能实现
Android 系统属性添加篇
二、核心修改文件和实现方式
1、修改文件
frameworks/opt/net/wifi/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
frameworks/opt/net/wifi/libs/WifiTrackerLib/src/com/android/wifitrackerlib/ScanResultUpdater.java
frameworks/opt/net/wifi/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
packages/modules/Wifi/framework/java/android/net/wifi/BaseWifiService.java
packages/modules/Wifi/framework/java/android/net/wifi/IWifiManager.aidl
packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
packages/modules/Wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
疑问思考
如做过Android
应用和对系统Room
稍微了解,理论上按照 参考资料 RKAndroid11-WIFI白名单功能实现 里面所讲,上面的 BaseWifiService、IWifiManager、WifiManager、WifiServiceImpl
通过新增接口就能够实现 需求,无外乎就是新增 aidl
接口,然后在获取WIFI
列表时候进行判断过滤。
实际上如果仅仅上面的添加接口,并未实际意义上实现,特别是在进入系统设置WIFI
设置里面或者进入下拉框点击WIFI列表关闭、打开。 第一次一定能够搜索到全部的WIFI
列表,在一次WIFI
扫码过后才会执行 过滤逻辑,按照自己预定义的逻辑走。 这个和WIFI
流程有关,所有还需要修改wifitrackerlib
里面的流程,进行过滤、修改。
2、实现方式
下面列举核心的主要实现思路
a)新增四个属性
参考资料:Android 系统属性添加篇 新增两个属性 用来存储 WIFI 当前模式和白名单数据,如下效果:
b)IWifiManager.aidl 接口添加
新增接口定义如下:
// modify by fangchen start void setWiFiWhiteList(in List<String> whiteList); List<String> getWiFiWhiteList();// modify by fangchen end
c)BaseWifiService 接口实现
先看源码类定义如下:就是一个基类,实现aidl 接口
/*** Empty concrete class implementing IWifiManager with stub methods throwing runtime exceptions.** This class is meant to be extended by real implementations of IWifiManager in order to facilitate* cross-repo changes to WiFi internal APIs, including the introduction of new APIs, the removal of* deprecated APIs, or the migration of existing API signatures.** When an existing API is scheduled for removal, it can be removed from IWifiManager.aidl* immediately and marked as @Deprecated first in this class. Children inheriting this class are* then given a short grace period to update themselves before the @Deprecated stub is removed for* good. If the API scheduled for removal has a replacement or an overload (signature change),* these should be introduced before the stub is removed to allow children to migrate.** When a new API is added to IWifiManager.aidl, a stub should be added in BaseWifiService as* well otherwise compilation will fail.** @hide*/
public class BaseWifiService extends IWifiManager.Stub {
新增 接口实现:
// modify by fangchen start @Overridepublic void setWiFiWhiteList( List<String> blackList){throw new UnsupportedOperationException();};@Overridepublic List<String> getWiFiWhiteList(){throw new UnsupportedOperationException();};// modify by fangchen end
d)WifiServiceImpl - WIFI服务实现类
继续先看类定义,如下;就是处理Wifi 操作请求,通过 IWifiManager 来实现。 其实具体的工作还是交给 IWifiManager 来实现的。
/*** WifiService handles remote WiFi operation requests by implementing* the IWifiManager interface.*/
public class WifiServiceImpl extends BaseWifiService {
提供白名单集合供外部访问
// modify by fangchen start /*# modify by fangchen start wifimode:0->default 1->forbidden all 2->custom filter wifi list # modify by fangchen start wifidata ->default is null */public static final String PERSIST_FISE_CUSTOM_WIFIMODE = "persist.fise.custom.wifimode";public static final String