我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 13 以太网开发总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 13 以太网开发总结

Android 13 以太网开发总结

前言

相较于Android12,Android13将以太网相关功能整合到ConnectivityService里,将以太网的核心源码从framework上移到packages/modules/Connectivity下,功能也做了相关更新。


一、具体变更

对于Android13以前的版本的方法做了限制,不允许Android13以上的版本使用。如设置以太网参数的方法和获取以太网参数的方法。

增加了以太网开关的方法setEthernetEnabled()。

新增了车机项目更新以太网参数的方法updateConfiguration()。

新增以太网状态变更通知机制。

二、合入mainline后以太网开发思路

1、由于合入mainline后,ConnectivityService会被替换,以前开发使用的在EthernetService里实现新接口的方法行不通了。

2、如何获取以太网状态变更:

以前是通过判断以太网节点eth0是否存在来判断以太网是否连接,在Android13上是行不通的。但是通过阅读源码发现,Android13版本的以太网帮你实现了以太网状态变更后通知的机制,当EthernetService处理完以太网插拔事件、网络配置更新事件、以太网开启关闭事件后会主动调用
InterfaceStateListener通知所有监听。
通过实现他的接口就可监听以太网状态的变更,可以监听到以太网的状态state、路由role、网络配置IpConfiguration 。

    public interface InterfaceStateListener {                @SystemApi(client = MODULE_LIBRARIES)        void onInterfaceStateChanged(@NonNull String iface, @InterfaceState int state,                @Role int role, @Nullable IpConfiguration configuration);    }     mEthernetListener = new EthernetManager.InterfaceStateListener() {         @Override         public void onInterfaceStateChanged(@NonNull String iface, int state, int role,@NonNull IpConfiguration configuration) {                 //do somthing         }     };

3、如何调用已经禁止使用的方法:getConfiguration() setConfiguration()

Google通过

@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)

来禁止不符合条件的app和service来调用它的方法。简单来说就是如果api高于Android11 ,应用就无法使用以前的接口设置有线网配置。

如果可以修改源码,当然有很多方法来越过这些限制,比如实现一个名字不同功能一样的接口,这样既不影响CTS测试,又可以轻松的完成工作。但是上文所说Android13以太网相关功能被整合到ConnectivityService里,而mainline会替换ConnectivityService,导致无法修改源码。

为了绕开限制,作者也做过很多尝试,但都行不通。Android这几年框架变化很快,越来越符合我们刚学习编程时老师教我们的那句思想:”高内聚,低耦合“,也就是模块化越来越明显了,深入学习Android编译规则在工作中也会更加轻松。好了,诸多方法行不通后,我们还有最后的大招:“反射”,亲测反射还是可以正常调用这些做了限制的方法。

    private IpConfiguration getConfiguration(String iface){        IpConfiguration mIpConfiguration = null;        try{            Class<? extends EthernetManager> c = mEthManager.getClass();            Method method = c.getMethod("getConfiguration", String.class);            EthernetManager tempManager = mEthManager;            method.setAccessible(true);            Log.e(TAG,"get getConfiguration Method: " + (method == null));            Object Values = method.invoke(tempManager,iface);            mIpConfiguration = (IpConfiguration)Values;        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {            Log.e(TAG,"getDeclaredMethod: " + e.getMessage());        }        return mIpConfiguration;    }
    private void setConfiguration(String iface ,IpConfiguration config){        try{            Class<? extends EthernetManager> c = mEthManager.getClass();            Method method = c.getMethod("setConfiguration", String.class ,IpConfiguration.class);            EthernetManager tempManager = mEthManager;            method.setAccessible(true);            Log.e(TAG,"get setConfiguration Method: " + (method == null));            method.invoke(tempManager,iface, config);        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {            Log.e(TAG,"getDeclaredMethod: " + e.getMessage());        }    }

总结

例如:以上就是今天要讲的内容,个人见解,如有不对请指出。

来源地址:https://blog.csdn.net/qq_42457766/article/details/131069774

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 13 以太网开发总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android开发板开发总结

Android系统的网络 不能同时使用GPRS和WIFI,android系统设备的网络状态分三种: WIFI GPRS 无 手机的默认方式是:WIFI连接优先,当有WIFI连接时,就自动将GPRS连接断开;当WIFI没有连接时,就会自动连接
2022-06-06

Android P适配以太网功能开发指南

Android P适配以太网功能开发指南前言此时的我吃着火锅唱着歌,进行着Android P(此P非彼P,Android 9)的适配工作。我真的只能说每次Android版本的迭代更新,都是对我们的一次炼狱般的摧残啊,各种适配啊,我真的想说f
2022-06-06

Android开发常见问题总结

本文总结分析了Android开发常见问题。分享给大家供大家参考,具体如下: 1. 在ui中使用scrollview之后,假如复写activity的onkeydown或onkeyup事件,若果焦点在scrollview上,则这两个事件是不触发
2022-06-06

Android开发中Intent用法总结

本文实例讲述了Android开发中Intent用法。分享给大家供大家参考,具体如下: Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一
2022-06-06

Android开发性能优化总结

一. 加载 预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存。2.资源预加载 懒加载:1.Fragment懒加载2.资源懒加载 二. 缓存 1. Http缓存,淘汰时间 2. 图片缓存,bitmap压
2022-06-06

Android开发笔记 Handler使用总结

一、Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是
2022-06-06

Android开发的16条小经验总结

Android开发的16条小经验总结,希望对各位搞Android开发的朋友有所帮助。1.TextView中的getTextSize返回值是以像素(px)为单位的,而setTextSize()是以sp为单位的.所以如果直接用返回的值来设置会出
2022-06-06

Android程序开发之WebView使用总结

前言:今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结。使用场景:1.)添加权限2022-06-06

Android 开发调试工具的使用总结

Android 调试工具,这里做一个总结整理。 DDMS -- Dalvik debug monitor service 调试监控服务对模拟器进行相关配置。 ADB进程 Android debug bridge 建立ecli
2022-06-06

ADB通过网络(以太网或WIFI)调试Android设备(手机或工业开发板)

下载Android终端模拟器(jackpal.androidterm_v1.0.70.apk) 在目标Android设备上安装Android终端模拟器 打开Android终端模拟器,输入下面的内容(目的:打开Android设备的ADB调试器
2022-06-06

Android开发之TextView控件用法实例总结

本文实例总结了Android开发之TextView控件用法。分享给大家供大家参考,具体如下: TextView控件可以向用户展现文本信息,我们可以设置该文本信息是否能编辑 1、TextView基本使用 在程序中创建TextView对象 在x
2022-06-06

kafka connector 使用总结以及自定义connector开发

Kafaka connect 是一种用于在Kafka和其他系统之间可扩展的、可靠的流式传输数据的工具。它使得能够快速定义将大量数据集合移入和移出Kafka的连接器变得简单。Kafka Connect可以从数据库或应用程序服务器收集数据到Kafka topic,
kafka connector 使用总结以及自定义connector开发
2018-02-07

Android开发之获取LayoutInflater对象的方法总结

本文实例讲述了Android开发之获取LayoutInflater对象的方法。分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View。本文主要目的是总
2022-06-06

Android编程开发之性能优化技巧总结

本文详细总结了Android编程开发之性能优化技巧。分享给大家供大家参考,具体如下: 1.http用gzip压缩,设置连接超时时间和响应超时时间 http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的ht
2022-06-06

Android 日常开发总结的60条技术经验

1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。 2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOr
2022-06-06

Android开发之资源文件用法实例总结

本文实例总结了Android开发之资源文件用法。分享给大家供大家参考,具体如下: 这里记录在Android开发中经常用到的一些用法 arrays.xml定义数组 例:
2022-06-06

android和java以太坊开发区块链应用使用web3j类库

如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用web3j
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录