android 11新增删除连接wifi的配置接口
创始人
2024-05-25 09:37:42
0

需求:在11.0的产品开发中,对于wifi的功能定制需求功能也是挺多的,目前对于wifi模块有这么个需求,要求在 提供接口实现删除已连接wifi的需求,所以需要了解wifi相关的配置情况,然后移除wifi即可

1.删除连接wifi的配置信息的相关代码

frameworks/base/wifi/java/android/net/wifi/IWifiManager.aidl
frameworks/base/wifi/java/android/net/wifi/WifiManager.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/BaseWifiService.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java

2.删除连接wifi的配置信息的相关功能分析

删除wifi配置的实现方法

在wifi的相关aidl wifiservice的管理类等相关wifi模块提供需要删除wifi信息的接口,然后在 wifiManager这个 wifiManager核心类里面根据wifi的ssid来删除wifi断开连接

2.1IWifiManager.aidl增加wifi接口

IWifiManager.aidl增加移除wifi配置接口

--- a/frameworks/base/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/frameworks/base/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -262,4 +262,7 @@ interface IWifiManagerboolean registerWifiRssiLinkSpeedAndFrequencyObserver(IWifiRssiLinkSpeedAndFrequencyObserver observer);boolean unregisterWifiRssiLinkSpeedAndFrequencyObserver(IWifiRssiLinkSpeedAndFrequencyObserver observer);//<-- Add for Wifi Rssi LinkSpeed And Frequency Observer
+       void removeWiFiConfiguration(String ssid);}

2.2 WifiManager.java里增加移除wifi配置相关信息

WifiManager是 Android 暴露给开发者使用的一个系统服务管理类,会调用service简介地和framework层, 驱动层进行函数调用, 然后驱动层会回调至上层, 以广播的形式实现通知

public class WifiManager {public WifiManager(@NonNull Context context, @NonNull IWifiManager service,@NonNull Looper looper) {mContext = context;mService = service;mLooper = looper;mTargetSdkVersion = context.getApplicationInfo().targetSdkVersion;updateVerboseLoggingEnabledFromService();}public List getConfiguredNetworks() {try {ParceledListSlice parceledList =mService.getConfiguredNetworks(mContext.getOpPackageName(),mContext.getAttributionTag());if (parceledList == null) {return Collections.emptyList();}return parceledList.getList();} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}/** @hide */@SystemApi@RequiresPermission(allOf = {ACCESS_FINE_LOCATION, ACCESS_WIFI_STATE, READ_WIFI_CREDENTIAL})public List getPrivilegedConfiguredNetworks() {try {ParceledListSlice parceledList =mService.getPrivilegedConfiguredNetworks(mContext.getOpPackageName(),mContext.getAttributionTag());if (parceledList == null) {return Collections.emptyList();}return parceledList.getList();} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}

在 forgetNetwork(String ssid) 中根据ssid的类型调用wifimanager的.removePasspointConfiguration和forget的api来删除wifi配置

 
diff --git a/frameworks/base/wifi/java/android/net/wifi/WifiManager.java b/frameworks/base/wifi/java/android/net/wifi/WifiManager.java
index a55dbde9c0..4bdc586e9b 100755
--- a/frameworks/base/wifi/java/android/net/wifi/WifiManager.java
+++ b/frameworks/base/wifi/java/android/net/wifi/WifiManager.java
@@ -1764,7 +1764,28 @@ public class WifiManager {throw e.rethrowFromSystemServer();}}
+       public void removeWiFiConfiguration(String ssid){
+               try {
+            forgetNetwork(ssid);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }public void forgetNetwork(String ssid) {if (TextUtils.isEmpty(ssid)) {return;}WifiManager mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();WifiConfiguration mWifiConfig = IsExsits(ssid, mWifiManager);if (mWifiInfo != null && mWifiInfo.isEphemeral() && ssid.equals(mWifiInfo.getSSID())) {mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());} else if (mWifiConfig != null) {if (mWifiConfig.isPasspoint()) {mWifiManager.removePasspointConfiguration(mWifiConfig.FQDN);} else {mWifiManager.forget(mWifiConfig.networkId, null);}} else {Log.e(TAG,"failed to forget ssid:" + ssid);}}
// 判断ssid是否存在private WifiConfiguration IsExsits(String SSID, WifiManager mWifiManager) {List existingConfigs = mWifiManager.getConfiguredNetworks();for (WifiConfiguration existingConfig : existingConfigs) {if (existingConfig.SSID.equals("\"" + SSID + "\"")) {return existingConfig;}}return null;}

2.3 BaseWifiService.java添加 Iwifimanager.aidl的接口实现

BaseWifiService的核心类主要承担wifi服务端binder通讯的角色,所以需要实现wifi的接口

diff --git a/frameworks/opt/net/wifi/service/java/com/android/server/wifi/BaseWifiService.java b/frameworks/opt/net/wifi/service/java/com/android/server/wifi/BaseWifiService.java
old mode 100644
new mode 100755
index 8ca3753b7b..d826f33a25
--- a/frameworks/base/wifi/java/com/android/server/wifi/BaseWifiService.java
+++ b/frameworks/base/wifi/java/com/android/server/wifi/BaseWifiService.java
@@ -565,4 +565,19 @@ public class BaseWifiService extends IWifiManager.Stub {throw new UnsupportedOperationException();}@Overridepublic void stopLocalOnlyHotspot() {throw new UnsupportedOperationException();}@Overridepublic void startWatchLocalOnlyHotspot(ILocalOnlyHotspotCallback callback) {throw new UnsupportedOperationException();}@Overridepublic void stopWatchLocalOnlyHotspot() {throw new UnsupportedOperationException();}@Overridepublic int getWifiApEnabledState() {throw new UnsupportedOperationException();}@Overridepublic WifiConfiguration getWifiApConfiguration() {throw new UnsupportedOperationException();}@Overridepublic SoftApConfiguration getSoftApConfiguration() {throw new UnsupportedOperationException();}@Overridepublic boolean setWifiApConfiguration(WifiConfiguration wifiConfig, String packageName) {throw new UnsupportedOperationException();}@Overridepublic boolean setSoftApConfiguration(SoftApConfiguration softApConfig, String packageName) {throw new UnsupportedOperationException();
+       @Override
+       public void removeWiFiConfiguration(String ssid){
+                throw new UnsupportedOperationException();
+               
+       }}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...