当前位置: 首页 > news >正文

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 
http://www.dtcms.com/a/363519.html

相关文章:

  • 一次别开生面的Java面试
  • Servlet基础
  • Redisson分布式锁会发生死锁问题吗?怎么发生的?
  • Aurobay EDI 需求分析:OFTP2 与 EDIFACT 驱动的汽车供应链数字化
  • UniApp 实现搜索页逻辑详解
  • uniapp H5预览图片组件
  • 年轻教师开学焦虑破解:从心出发,重构健康工作生活新秩序
  • uni-app 布局之 Flex
  • 第一讲、Kafka 初识与环境搭建
  • ImageMagick命令行图片工具:批量实现格式转换与压缩,支持水印添加及GIF动态图合成
  • windows系统离线安装Ollama、创建模型(不使用docker)、coze调用
  • 51c大模型~合集177
  • Swift 解法详解:LeetCode 369《给单链表加一》
  • 研发团队缺乏统一文档模板怎么办
  • 苹果开发中什么是Storyboard?object-c 和swiftui 以及Storyboard到底有什么关系以及逻辑?优雅草卓伊凡
  • 【后端】Docker 常用命令详解
  • 构建企业级区块链网络:基于AWS EC2的弹性、高可用解决方案
  • 2025软件测试面试热点问题,3天刷完你的软件测试就牛了
  • 不同编译器之间代码转换
  • Java学习笔记-零基础学MySQL(二)
  • QT C++传递 map 给qml 中访问的两种方式
  • 深度学习容器化部署
  • Nginx 调度算法全解析:从基础到高级的负载均衡策略
  • HOW - 在浏览器下载一个 Excel 表格文件
  • Qt Demo(3) 之 deepseek 帮我写的关于图像显示的小界面
  • 漫画短剧小程序系统开发:从0到1的核心架构与思路
  • Redis 缓存雪崩实战:从监控告警到3层防护的完整修复
  • 【读论文】美团开源MOE大模型LongCat-Flash
  • Pod自动重启问题排查:JDK 17 EA版本G1GC Bug导致的应用崩溃
  • 线上排查bug的命令