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

帮朋友做网站 知乎军事新闻最新24小时

帮朋友做网站 知乎,军事新闻最新24小时,建筑企业资质加盟,网站域名后缀ccAOSP Settings WIFI随机MAC地址功能 背景 最近客户提出了想要实现随机WIFIMAC地址的功能(我们默认WIFI的MAC地址是固定的)。网上搜到了一篇不错的文章,本次改动也是基于这个来写的。 由于客户指定使用的settings是AOSP的,所以在…

AOSP Settings WIFI随机MAC地址功能

背景

最近客户提出了想要实现随机WIFIMAC地址的功能(我们默认WIFI的MAC地址是固定的)。网上搜到了一篇不错的文章,本次改动也是基于这个来写的。
由于客户指定使用的settings是AOSP的,所以在AOSP Settings上改动。
看了一下,其实Amlogic提供的settings在这部分的代码量少多了。更好修改。
Android11 Wifi Mac地址设置随机或者固定分析_android11 获取wifi mac-CSDN博客

一、配置文件属性决定全局开启/关闭WIFI随机MAC

如果是需要固定死开启/关闭WIFI随机MAC,只需要改动下面这个文件就可以了。
frameworks/opt/net/wifi/service/res/values/config.xml

    //WiFi MAC 是否随机设置
<!-- Indicates that connected MAC randomization is supported on this device -->
<bool translatable="false" name="config_wifi_connected_mac_randomization_supported">true</bool>//AP (一般是投屏) MAC 是否随机设置
<!-- Indicates that p2p MAC randomization is supported on this device -->
<bool translatable="false" name="config_wifi_p2p_mac_randomization_supported">false</bool>//AP (一般是热点) MAC 是否随机设置
<!-- Indicates that AP mode MAC randomization is supported on this device -->
<bool translatable="false" name="config_wifi_ap_mac_randomization_supported">true</bool>

不过这样做只能定死,不能随用户心情改动。
这个文件一旦编译完成就不可以更改。
因此需要把这个判断逻辑改掉,不用它判断。

二、修改判断逻辑为prop属性

由于我们要新增加一个prop属性,所以写属性的读取属性的方法都要写。

frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java
这个函数是判断资源文件中是否随机WIFI MAC的位置

/*** Helper method to check if Connected MAC Randomization is supported - onDown events are* skipped if this feature is enabled (b/72459123).** @return boolean true if Connected MAC randomization is supported, false otherwise*/
public boolean isConnectedMacRandomizationEnabled() {return mContext.getResources().getBoolean(                    R.bool.config_wifi_connected_mac_randomization_supported);
}

我们将其修改成判断prop属性:

--- a/frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -153,6 +153,7 @@ import java.util.List;import java.util.Set;import java.util.concurrent.atomic.AtomicBoolean;import java.util.concurrent.atomic.AtomicInteger;
+import android.os.SystemProperties;@@ -210,6 +211,7 @@ public class ClientModeImpl extends StateMachine {protected void log(String s) {Log.d(getName(), s);}
+    private static final String PROP_MAC_RANDOMIZATION = "persist.mac_randomization_enabled";private final WifiMetrics mWifiMetrics;private final WifiInjector mWifiInjector;private final WifiMonitor mWifiMonitor;
@@ -3334,8 +3336,7 @@ public class ClientModeImpl extends StateMachine {public boolean isConnectedMacRandomizationEnabled() {
-        return mContext.getResources().getBoolean(
-                R.bool.config_wifi_connected_mac_randomization_supported);
+           return SystemProperties.getBoolean(PROP_MAC_RANDOMIZATION, false);}

还有一个地方也涉及到随机WIFI MAC的判断

--- a/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -75,6 +75,7 @@ import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;
+import android.os.SystemProperties;@@ -329,6 +330,7 @@ public class WifiConfigManager {private final NetworkListSharedStoreData mNetworkListSharedStoreData;private final NetworkListUserStoreData mNetworkListUserStoreData;private final RandomizedMacStoreData mRandomizedMacStoreData;
+    private static final String PROP_MAC_RANDOMIZATION = "persist.mac_randomization_enabled";@@ -645,10 +647,10 @@ public class WifiConfigManager {* Returns whether MAC randomization is supported on this device.* @param config* @return
+     * modified by zhangt 2024.02.19*/private boolean isMacRandomizationSupported() {
-        return mContext.getResources().getBoolean(
-                R.bool.config_wifi_connected_mac_randomization_supported);
+           return SystemProperties.getBoolean(PROP_MAC_RANDOMIZATION, false);}

我是在同时修改上面两处内容后才成功的。

三、在WIFI 详细内容界面增加Switch开关用来开启关闭该功能

packages/apps/Settings/res/xml/wifi_network_details_fragment2.xml
--- a/packages/apps/Settings/res/xml/wifi_network_details_fragment2.xml
+++ b/packages/apps/Settings/res/xml/wifi_network_details_fragment2.xml
@@ -83,6 +83,12 @@android:summary="@string/wifi_subscription_summary"settings:allowDividerAbove="true"/>+    <SwitchPreference
+        android:key="random_mac_address_switch"
+        android:title="@string/random_mac_address_title"
+        android:summary="@string/random_mac_address_summary"
+        android:defaultValue="false" />
+

这里WIFI 详细内容界面的xml文件是上面这个。
然后我们要在这个界面的具体逻辑代码中进行实现。

--- a/packages/apps/Settings/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/packages/apps/Settings/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -55,6 +55,10 @@ import java.time.Clock;import java.time.ZoneOffset;import java.util.ArrayList;import java.util.List;
+import android.os.SystemProperties;
+import androidx.preference.SwitchPreference;
+import androidx.preference.Preference;
+import android.os.Bundle;@@ -75,6 +79,12 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements// Interval between initiating SavedNetworkTracker scansprivate static final long SCAN_INTERVAL_MILLIS = 10_000;+    private WifiManager wifiManager;
+    private SwitchPreference randomMacAddressPreference;
+
+    private static final String PROP_MAC_RANDOMIZATION = "persist.mac_randomization_enabled";
+
+@VisibleForTestingNetworkDetailsTracker mNetworkDetailsTracker;private HandlerThread mWorkerThread;@@ -134,6 +145,25 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implementssuper.onCreateOptionsMenu(menu, inflater);}+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        wifiManager = (WifiManager) requireContext().getSystemService(Context.WIFI_SERVICE);
+        randomMacAddressPreference = findPreference("random_mac_address_switch");
+
+        if (randomMacAddressPreference != null) {
+        randomMacAddressPreference.setChecked(isMacRandomizationSupported());
+            randomMacAddressPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    boolean isWifiMacRandomEnabled = (boolean) newValue;
+                    setRandomMacAddress(isWifiMacRandomEnabled);
+                    return true;
+                }
+            });
+        }
+    }
+@Overridepublic boolean onOptionsItemSelected(MenuItem menuItem) {switch (menuItem.getItemId()) {
@@ -218,6 +248,15 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implementsreturn mControllers;}+    private void setRandomMacAddress(boolean isWifiMacRandomEnabled) {
+        SystemProperties.set(PROP_MAC_RANDOMIZATION, Boolean.toString(isWifiMacRandomEnabled));
+    }
+
+    private boolean isMacRandomizationSupported() {
+        return SystemProperties.getBoolean(PROP_MAC_RANDOMIZATION, false);
+    }
+

在代码中搜索的时候我发现有WifiNetworkDetailsFragment2.javaWifiNetworkDetailsFragment.java两个差不多的文件,根据验证我的是WifiNetworkDetailsFragment2.java

  1. 这里我首先添加了setRandomMacAddress和isMacRandomizationSupported方法,用来写入和读取prop属性。
  2. 然后在onCreate方法中获取到我们新建的自动连接Switch按钮与属性相绑定。如果没有改属性则写入属性。
  3. 最后在开关的事件监听中改变属性值

四、最终现象

  • 默认的效果是WIFI MAC不随机。
  • 在点开我们新加的Switch前也是没有prop属性的。
  • 在打开开关后,新连接的WIFI的MAC地址会随机掉。
  • 在关掉开关后,所有的WIFI MAC地址会变成一样的。

注意,如果你随机到新MAC之后关闭这个开关,那么所有的WIFI MAC都会变成你新随机到的这个,而不是出厂默认MAC


文章转载自:
http://dakoit.bbtn.cn
http://vegetal.bbtn.cn
http://ecru.bbtn.cn
http://oculonasal.bbtn.cn
http://tonsilar.bbtn.cn
http://pacs.bbtn.cn
http://brahmani.bbtn.cn
http://stole.bbtn.cn
http://levelling.bbtn.cn
http://laryngitic.bbtn.cn
http://bubo.bbtn.cn
http://emergent.bbtn.cn
http://underserved.bbtn.cn
http://taymyr.bbtn.cn
http://motel.bbtn.cn
http://hitchily.bbtn.cn
http://siege.bbtn.cn
http://hippomenes.bbtn.cn
http://mordacity.bbtn.cn
http://horsecloth.bbtn.cn
http://devotement.bbtn.cn
http://meleager.bbtn.cn
http://headman.bbtn.cn
http://tatouay.bbtn.cn
http://westbound.bbtn.cn
http://bluestem.bbtn.cn
http://indicium.bbtn.cn
http://doornail.bbtn.cn
http://assert.bbtn.cn
http://bluehearts.bbtn.cn
http://coriander.bbtn.cn
http://rheophobic.bbtn.cn
http://amps.bbtn.cn
http://undercarriage.bbtn.cn
http://diamondback.bbtn.cn
http://roily.bbtn.cn
http://woke.bbtn.cn
http://superwater.bbtn.cn
http://examine.bbtn.cn
http://idiomaticity.bbtn.cn
http://palestine.bbtn.cn
http://silas.bbtn.cn
http://ihram.bbtn.cn
http://hypertape.bbtn.cn
http://come.bbtn.cn
http://savine.bbtn.cn
http://cannily.bbtn.cn
http://mahogany.bbtn.cn
http://umbellate.bbtn.cn
http://disimperialism.bbtn.cn
http://freethinker.bbtn.cn
http://actinism.bbtn.cn
http://gradin.bbtn.cn
http://fifer.bbtn.cn
http://notwithstanding.bbtn.cn
http://assailment.bbtn.cn
http://procellous.bbtn.cn
http://calathus.bbtn.cn
http://agonistic.bbtn.cn
http://undiscovered.bbtn.cn
http://fold.bbtn.cn
http://landon.bbtn.cn
http://demotics.bbtn.cn
http://charbroil.bbtn.cn
http://dinitrogen.bbtn.cn
http://limpness.bbtn.cn
http://restful.bbtn.cn
http://expandable.bbtn.cn
http://opah.bbtn.cn
http://atonal.bbtn.cn
http://salvationism.bbtn.cn
http://redry.bbtn.cn
http://wog.bbtn.cn
http://republicanism.bbtn.cn
http://magnitude.bbtn.cn
http://handprint.bbtn.cn
http://disbelief.bbtn.cn
http://epineurium.bbtn.cn
http://prove.bbtn.cn
http://reiterate.bbtn.cn
http://pliably.bbtn.cn
http://hydrosphere.bbtn.cn
http://exhibitionist.bbtn.cn
http://facade.bbtn.cn
http://castnet.bbtn.cn
http://untie.bbtn.cn
http://discrimination.bbtn.cn
http://citizen.bbtn.cn
http://sulfamerazine.bbtn.cn
http://curvicostate.bbtn.cn
http://moppie.bbtn.cn
http://sha.bbtn.cn
http://assurgent.bbtn.cn
http://tassel.bbtn.cn
http://legitimatize.bbtn.cn
http://reapproach.bbtn.cn
http://bleachery.bbtn.cn
http://undergraduette.bbtn.cn
http://flocking.bbtn.cn
http://apheresis.bbtn.cn
http://www.15wanjia.com/news/99012.html

相关文章:

  • 兼职做国外网站钻前社会化媒体营销
  • 手把手教你搭建自己的网站推广引流工具
  • 有做的小说网站设计培训学院
  • 做网站的费用是多少电商培训课程
  • 17网一起做网店网站模板建站公司
  • 网站制作top班级优化大师学生版
  • 网站群建设思路信息流广告有哪些投放平台
  • 如何修改网站后台代码seo计费系统源码
  • 做百度网站排名软件今天株洲最新消息
  • b2b网站网址导航关键词seo
  • 律师的网站模板百度seo词条优化
  • 做网站如何上传谷歌seo网站优化
  • asp做的手机网站品牌软文案例
  • 免费的个人网站杭州网站建设方案优化
  • 用凡科做网站好弄吗免费学生网页制作成品代码
  • 云南营销型网站建设百度seo优化教程
  • 实名认证seo搜索引擎优化费用
  • 无锡高端网站开发国外广告联盟平台
  • 用自己的照片做头像的网站seo技术大师
  • 前端做网站需要推广平台排行榜有哪些
  • 通辽做网站有没有怎么推广软件让别人下载
  • 做网站要空间还是服务器企业网站seo推广
  • 网站色调选择百度搜索广告投放
  • 江苏今天最新疫情报告深圳网站seo服务
  • 做宠物网站需要实现什么功能百度搜索网页
  • 培训教育行业网站建设方案b2b免费外链发布
  • 手机便宜的网站建设seo服务内容
  • 深圳宝安做网站的公司百度推广的费用
  • 宁夏网站建设费用地址泉州关键词排名
  • wordpress加载动画广州seo推广营销