Android 13 移植EthernetSettings/Ethernet更新

news/2024/11/12 22:07:05/
移植EthernetSettings

Android 13 在Settings搜索没有发现以太网设置,应该是移除了,但是客户的设备需要,所以移植Android 11的.

以太网相关的功能在Android13中进行模块化,提取到packages/modules/Connectivity/中,
EthernetManager相关代码从framework移到packages/modules/Connectivity/下.

Android 13 internet界面有无网络,会显示不同的界面!

--- a/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
@@ -16,11 +16,16 @@package com.android.server.ethernet;+import static android.net.EthernetManager.ETHERNET_STATE_DISABLED;
+import static android.net.EthernetManager.ETHERNET_STATE_ENABLED;import static android.net.NetworkCapabilities.TRANSPORT_TEST;import android.annotation.NonNull;import android.annotation.Nullable;
+import android.content.BroadcastReceiver;import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;@@ -63,6 +69,14 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {mContext = context;mHandler = handler;mTracker = tracker;
+        //add xxx
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction("xx.action.xx.ethernet.open");
+        intentFilter.addAction("xx.action.xx.ethernet.close");
+        mEthernetSwitchBroadcast = new EthernetSwitchBroadcastReceiver();
+        context.registerReceiver(mEthernetSwitchBroadcast, intentFilter);
+        //add xxx
+}private void enforceAutomotiveDevice(final @NonNull String methodName) {
@@ -77,9 +91,63 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {public void start() {Log.i(TAG, "Starting Ethernet service");
-        mTracker.start();
-        mStarted.set(true);
+        //add xxx
+        //mTracker.start();
+        //mStarted.set(true);
+        mEthernetState = getEthernetState();
+        boolean is_enabled = false;
+        if (mEthernetState == ETHERNET_STATE_ENABLED) {
+            is_enabled = true;
+        }
+        mTracker.start(is_enabled);
+        mStarted.set(is_enabled);
+        //add xxx
+    }
+
+    //add xxx
+    private EthernetSwitchBroadcastReceiver mEthernetSwitchBroadcast;
+    private int mState = -1;
+    private int mEthernetState; //-1 init 0 disable 1 enable
+
+    private int getEthernetState() {
+        int state = SystemProperties.getInt("xxx_ethernet_on", 0);
+        return state;
+    }
+
+    private void setEthernetState(int state) {
+        //SystemProperties.set("xxx__ethernet_on", state + "");
+    }
+
+    public synchronized void setState(int state) {
+        Log.i(TAG, "setState from mState=" + mState + " to state=" + state);
+        if (mState != state) {
+            mState = state;
+            if (state == ETHERNET_STATE_DISABLED) {
+                //setEthernetState(ETHERNET_STATE_DISABLED);
+                mTracker.setIntefaceState(false);
+                mStarted.set(false);
+            } else {
+                //setEthernetState(ETHERNET_STATE_ENABLED);
+                mTracker.setIntefaceState(true);
+                mStarted.set(true);
+            }
+        }
+    }
+
+    class EthernetSwitchBroadcastReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            Log.d(TAG, "EthernetSwitchBroadcastReceiver action:" + action);
+            if (action.equals("xx.action.xx.ethernet.open")) {
+                setState(ETHERNET_STATE_ENABLED);
+            } else if (action.equals("xx.action.xx.ethernet.close")) {
+                setState(ETHERNET_STATE_DISABLED);
+            }
+
+        }}
+    //add xxxprivate void throwIfEthernetNotStarted() {if (!mStarted.get()) {
diff --git a/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java b/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
index 1c02a6625f..34c8c8dc8d 100644
--- a/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
+++ b/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
@@ -43,6 +43,7 @@ import android.os.Handler;import android.os.RemoteCallbackList;import android.os.RemoteException;import android.os.ServiceSpecificException;
+import android.provider.Settings;import android.text.TextUtils;import android.util.ArrayMap;import android.util.Log;
@@ -173,7 +174,12 @@ public class EthernetTracker {mConfigStore = new EthernetConfigStore();}+    //add xxxvoid start() {
+        start(true);
+    }
+
+    void start(boolean isEnabled) {mFactory.register();mConfigStore.read();@@ -191,8 +197,31 @@ public class EthernetTracker {Log.e(TAG, "Could not register InterfaceObserver " + e);}-        mHandler.post(this::trackAvailableInterfaces);
+        if (isEnabled) {
+            mHandler.post(this::trackAvailableInterfaces);
+        }
+    }
+
+    public synchronized void setIntefaceState(boolean isFaceUp) {
+        try {
+            String[] interfaces = getInterfaces(true);
+            for (String iface : interfaces) {
+                if (isTrackingInterface(iface)) {
+                    if (isFaceUp) {
+                        NetdUtils.setInterfaceUp(mNetd, iface);
+                    } else {
+                        NetdUtils.setInterfaceDown(mNetd, iface);
+                    }
+                }
+            }
+            if (isFaceUp) {
+                mHandler.post(this::trackAvailableInterfaces);
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Error change eth isFaceUp : " + isFaceUp);
+        }}
+    //add xxxvoid updateIpConfiguration(String iface, IpConfiguration ipConfiguration) {if (DBG) {
@@ -521,7 +550,7 @@ public class EthernetTracker {}final String hwAddress = config.hwAddr;
-
+        Settings.System.putString(mContext.getContentResolver(), "sys_tex_hwAddress", hwAddress);//add xx xxNetworkCapabilities nc = mNetworkCapabilities.get(iface);if (nc == null) {// Try to resolve using mac address

Android13 有线网开关研究
Android13 原生以太网实现设置静态IP
Android13 MTK平台添加以太网设置静态IP菜单

问题补充:再/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/ 目录下,
想利用SystemProperties.set()保存数据,但是编译报错,error: cannot find symbol,但是我明明导入了!
为什么这么确认我导入,因为还引用了SystemProperties.getInt().然后控制变量,定位到问题是SystemProperties.set()无法再这个目录使用.
为什么会有这个问题呢?我百度大法,有了一些大致的猜想!然后去查看了它的Android.bp

packages/modules/Connectivity/service-t/Android.bp// This builds T+ services depending on framework-connectivity-t
// hidden symbols separately from the S+ services, to ensure that S+
// services cannot accidentally depend on T+ hidden symbols from
// framework-connectivity-t.
java_library {name: "service-connectivity-tiramisu-pre-jarjar",sdk_version: "system_server_current",// TODO(b/210962470): Bump this to at least S, and then T.min_sdk_version: "30",srcs: [":service-connectivity-tiramisu-sources",],libs: [ 

问题可能关于sdk_version这个属性有关!
当然上面的都只是猜测,只是做个记录,为什么无法编译的bug还没解决.

然后去询问大佬,大佬提供一个思路,让我用反射去调用它,确实编译通过了,数据也能保存.
(ps:我太执着于解决那个编译报错,而忘记了自己的目的!目的是啥,是利用SystemProperties.set()保存数据,
既然(正常)固定的调用方式编译报错,然后一时半会又搞不定编译报错(难点:报错信息不够明确,无法定位).
应该先去想还有什么其它的方式可能调用SystemProperties.set(),先达成目的,然后再回来想想那个编译报错.)

+++ b/packages/modules/Connectivity/service-t/src/com/android/server/ethernet/EthernetTracker.java
+import java.lang.reflect.Method;
@@ -551,6 +552,7 @@ public class EthernetTracker {final String hwAddress = config.hwAddr;
+        setProperty("sys.xxx.xxx",hwAddress);NetworkCapabilities nc = mNetworkCapabilities.get(iface);if (nc == null) {// Try to resolve using mac address
@@ -578,6 +580,17 @@ public class EthernetTracker {}}+    //add text
+    private void setProperty(String key, String value){
+        try {
+            Class<?> c =  Class.forName("android.os.SystemProperties");
+            Method method = c.getMethod("set",String.class,String.class);
+            method.invoke(c,key,value);
+        }catch (Exception e){
+            Log.d(TAG,"xxxxxxxxxx");
+        }
+    }
+    //add text

大佬的博客,感谢大佬
Android 使用反射机制获取或设置系统属性
Android高版本源码编译提示error: cannot find symbol
内置 APP 如何访问隐藏 API

Ethernet更新

新增以太网打开关闭的函数

./packages/modules/Connectivity/framework-t/src/android/net/EthernetManager.java@RequiresPermission(anyOf = {NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,android.Manifest.permission.NETWORK_STACK,android.Manifest.permission.NETWORK_SETTINGS})@SystemApi(client = MODULE_LIBRARIES)public void setEthernetEnabled(boolean enabled) {try {mService.setEthernetEnabled(enabled);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}
//需要权限和系统应用签名(SystemApi) 

Android 13 Ethernet变更


http://www.ppmy.cn/news/1508742.html

相关文章

QT 按钮延时以及滚动条提示

QPushButton *pBtnSub new QPushButton(this); pBtnSub->setAutoRepeat(true); //启用长按 pBtnSub->setAutoRepeatDelay(3000);//触发长按的时间 pBtnSub->setAutoRepeatInterval(500);//长按时click信号间隔 connect(pBtnSub, &QPus…

C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 在科技日新月异的今天&#xff0c;我们的电子设备如同生活中的伴侣&#xff0c;无论是工作、学习还是娱乐&#xff0c;都离不开它们的陪伴。随着Type-C接口逐渐成为众多高端智能手机、平板电脑、笔记本电脑…

Ubuntu基础使用

Ubuntu是一种流行的Linux操作系统。它提供了一个友好的图形界面和许多强大的功能&#xff0c;适用于个人电脑和服务器。一般来说使用Ubuntu都是在虚拟机上运行的。 一、虚拟机的安装 VMware是一家专门提供虚拟化解决方案的公司&#xff0c;而VMware Workstation是该公司开发的…

软件测试---接口测试

一、接口及接口测试概念 &#xff08;1&#xff09;接口的类型 &#xff08;2&#xff09;接口测试的概念 &#xff08;3&#xff09;接口测试的原理 &#xff08;4&#xff09;接口测试的特点 &#xff08;5&#xff09;接口测试的实现方式 二、HTTP协议 &#xff08;1&#…

如何在 Vue.js 项目中动态设置页面标题

目录 方法 1:使用 Vue Router 的元信息(meta) 步骤 1: 配置路由元信息 步骤 2: 使用路由守卫设置标题 方法 2:在组件内设置标题 在组件挂载时设置标题 使用响应式数据动态更新标题 在开发 Vue.js 应用时,设置动态页面标题是常见需求,尤其当应用包含多个页面时,为每…

ROS2 IMU 消息发布

ROS2 IMU 消息发布 仅做为笔记 学习用 本文源地址&#xff1a; 【ROS2】获取imu数据并可视化保姆级教程(C)_imu可视化-CSDN博客 /* * transform.hpp */ #include <string> #include <ctype.h> #include <float.h> #include <math.h> class transfor…

揭开中药神秘面纱:华盈生物的中药/复方有效成分鉴定技术

中药自古以来在中华文明中占据着重要的地位&#xff0c;其独特的疗效和复杂的成分组合令人叹为观止。然而&#xff0c;随着现代医学的发展和科学技术的进步&#xff0c;对中药及其复方的研究逐渐从经验性的应用转向科学的探索和验证。为了更好地理解中药的作用机制&#xff0c;…

软考学习笔记(0):软考准备

文章目录 前言软考的优点软考项目的选择资料选择 前言 最近因为某些原因&#xff0c;我又开始上班了。新工作是纯内网开发&#xff0c;那以后发博客的频率我估计就会很少了。 软考的优点 简单来说&#xff0c;软考考上了&#xff0c;大概一个月的薪资可以涨1000-3000&#x…