Android Settings 有線網設置界面優化

Android Settings 有線網設置界面優化

文章目錄

  • Android Settings 有線網設置界面優化
    • 一、前言
    • 二、簡單修改
      • 1、修改的EthernetSettings代碼:
      • 2、有線網ip獲取代碼:
      • 3、AndroidManifest.xml定義有線網的Activity
      • 4、修改后界面:
    • 三、其他
      • 1、有線網設置界面優化小結
      • 2、Android 拉起開發者設置界面命令和代碼實現
      • 3、Android13 有線網開關研究
      • 4、Android14 Settings應用添加有線網開關條目實現
      • 5、Android 獲取ip地址多種方式介紹

一、前言

快清明放假了,說點簡單的,有線網設置,估計只對部分系統開發的人有點用。

Android 原生設置應用好像大部分方案都是沒有顯示有線網設置界面的;

從接觸的方案看只有rk方案的原生設置應用顯示了有線網設置界面,和熱點設置界面是同級目錄顯示的。

如下圖所示:
在這里插入圖片描述

但是這個有線網設置界面又是存在點問題的:

有線網DHCP自動獲取模式下,是無法獲取到ip的;
只有在設置了靜態ip的模式下,才顯示ip和其他信息。

如下圖,所示:
在這里插入圖片描述

難道是RK從谷歌的一個調試分支下載的Settings源碼?

但是不應該啊,谷歌不會犯這么低級的錯誤吧,并且Ethernet的相關字符串都沒有國際化,只有英文的;

并且查看里面獲取有線網ip的地方居然使用的是反射,系統應用按道理是可以調用framework的隱藏方法的!

所以我大膽的猜測:這個有線網設置界面是RK自己添加的,并且是很久的代碼了,

一直挪用下來,未重新適配,看了她Android15提供的代碼也是一樣的問題。

這個也是一個小bug,本文只簡單修改一下。

二、簡單修改

1、修改的EthernetSettings代碼:

Settings\src\com\android\settings\ethernet\EthernetSettings.java

public class EthernetSettings extends SettingsPreferenceFragment ...{private static final String TAG = "EthernetSettings";private void refreshUI() {Iterator<String> iterator = mEthInfoList.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();String prefix = key + PREFIX_SPLIT;EthInfo info = mEthInfoList.get(key);log("info = " + info);if (info != null) {
-                setStringSummary(prefix + KEY_ETH_IP_ADDRESS, info.getIpAddress());
+			     IpConfiguration ipConfiguration = Reflect_getConfiguration("eth0");
+			     IpAssignment mode = ipConfiguration.getIpAssignment();
+				 if (mode == IpAssignment.DHCP || mode == IpAssignment.UNASSIGNED) {
+					 log("tyty  DHCP ========= ");
+					 setStringSummary(prefix + KEY_ETH_IP_ADDRESS, getEthernetIpAddress());
+				 }else{
+					setStringSummary(prefix + KEY_ETH_IP_ADDRESS, info.getIpAddress());}

上面只是把顯示ip地址那行替換成了getEthernetIpAddress()方法獲取的有線網ip地址就行;

2、有線網ip獲取代碼:

import android.net.ConnectivityManager;
import android.net.Network;
import android.net.LinkProperties;private ConnectivityManager mConnectivityManager;mConnectivityManager = (ConnectivityManager) getActivity().getSystemService(getActivity().CONNECTIVITY_SERVICE);public String getEthernetIpAddress() {Log.d(TAG,"");final Network network = getFirstEthernet();if (network == null) {return "";}final LinkProperties linkProperties = mConnectivityManager.getLinkProperties(network);if (linkProperties != null) {for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {InetAddress inetAddress = linkAddress.getAddress();if (inetAddress instanceof Inet4Address) {return inetAddress.getHostAddress();}}}return "";}public Network getFirstEthernet() {final Network[] networks = mConnectivityManager.getAllNetworks();for (final Network network : networks) {NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {return network;}}return null;}

3、AndroidManifest.xml定義有線網的Activity

        <activityandroid:name="Settings$EthernetSettingsActivity"android:label="@string/ethernet_settings_title"android:icon="@drawable/ic_settings_wireless"android:taskAffinity=""android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.VOICE_LAUNCH" /><category android:name="com.android.settings.SHORTCUT" /></intent-filter><meta-data android:name="com.android.settings.FRAGMENT_CLASS"android:value="com.android.settings.ethernet.EthernetSettings" /></activity><!-- Keep compatibility with old shortcuts. --><activity-aliasandroid:name=".EthernetSettings"android:label="@string/ethernet_settings"android:clearTaskOnLaunch="true"android:targetActivity="Settings$EthernetSettingsActivity"android:exported="true"><meta-data android:name="com.android.settings.FRAGMENT_CLASS"android:value="com.android.settings.EthernetSettings" /></activity-alias>

從上面代碼可以看到可以使用adb拉起有線網設置界面命令:

am start -n com.android.settings/.Settings\$EthernetSettingsActivity
am start -n com.android.settings/.EthernetSettings //有點bug,不一定能打開

如果無法使用上面命令打開有線網設置,那么設置應用應該就是沒有有線網設置界面的。

比如我開發的:MTK和AML方案的原生設置代碼就沒有有線網設置界面。

4、修改后界面:

沒有大改,只顯示了ip地址,其實動態獲取有線網的情況,網關,dns那些都應該隱藏的。
在這里插入圖片描述

后續有時時間再介紹一下有線網修改配置信息最新的api(Android13增加)吧。

三、其他

1、有線網設置界面優化小結

目前是rk方案存在的問題,其實沒啥需求可以隱藏這個條目的;

如果要顯示ip就按照上面的修改一下吧。

2、Android 拉起開發者設置界面命令和代碼實現

有些情況,原生設置是隱藏的或者不想打開原生設置,如何直接拉起開發者選項呢?

是否有命令或者代碼可以實現呢?

下面簡單介紹一下:

https://blog.csdn.net/wenzhi20102321/article/details/146985730

3、Android13 有線網開關研究

Android13 的api 提供了有線網開關 EthernetManager.setEthernetEnabled(boolean),
Android9 如果要設置有線網開關,需要自己實現。

https://blog.csdn.net/wenzhi20102321/article/details/131871354

4、Android14 Settings應用添加有線網開關條目實現

Android 原生Settings應用沒有有線網開關條目;
Tv平臺一般是有有線網連接的,如果沒有有線網控制條目是不太方便的;

如果要在原生Settings添加有線網開關和顯示有線網ip,要如何實現呢?

本文簡單實現一下,有需要的可以參考修改:

https://blog.csdn.net/wenzhi20102321/article/details/146536467

5、Android 獲取ip地址多種方式介紹

adb shell 的 ifconfig可以獲取當前設備網絡節點信息;
這些信息使用Android代碼也是可以獲取的;

Android 獲取網絡ip有多種方式,有時候某種方式獲取失敗的情況下;
那么就可以換一種獲取方式,所有多學習一下獲取網絡ip相關信息是有用的。

https://blog.csdn.net/wenzhi20102321/article/details/141673195

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75522.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于web的生產過程執行管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著世界經濟信息化、全球化的到來和電子商務的飛速發展&#xff0c;推動了很多行業的改革。若想達到安全&#xff0c;快捷的目的&#xff0c;就需要擁有信息化的組織和管理模式&#xff0c;建立一套合理、暢通、高效的線上管理系統。當前的生產過程執行管理存在管理效率…

XSS 攻擊風險與防御實踐

? 框架與 XSS 防護概況 框架是否默認轉義高危場景建議防御措施React? 是使用 dangerouslySetInnerHTML避免使用&#xff0c;必要時做內容清洗Vue.js? 是使用 v-html避免使用&#xff0c;或使用 DOMPurify 清洗Angular? 是使用 innerHTML、bypassSecurityTrustHtml謹慎繞過…

Cesium 時間線 及 坐標轉換

文章目錄 Cesium 基礎理解&#xff08;二&#xff09;TimeLine & Clock 應用場景核心代碼實例及解釋代碼解釋 Cesium 之 實體動畫構建實體動畫的技巧1. 利用時間屬性2. 組合動畫效果3. 使用動畫曲線 優化點1. 減少屬性更新頻率2. 優化實體數量3. 合理使用材質和紋理 注意事…

ngx_regex_init

定義在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就為假 條件不成立 ngx_regex_init 函數就成了空實現 NGX_PCRE2 被定義&#xff0c;則表示 Ngin…

第二期:深入理解 Spring Web MVC [特殊字符](核心注解 + 進階開發)

前言&#xff1a; 歡迎來到 Spring Web MVC 深入學習 的第二期&#xff01;在第一期中&#xff0c;我們介紹了 Spring Web MVC 的基礎知識&#xff0c;學習了如何 搭建開發環境、配置 Spring MVC、編寫第一個應用&#xff0c;并初步了解了 控制器、視圖解析、請求處理流程 等核…

一文讀懂數據倉庫:從概念到技術落地

數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合&#xff0c;用于支持管理決策。以下是關于數據倉庫的詳細介紹&#xff1a; 一、特點 面向主題&#xff1a;數據倉庫圍繞特定主題組織數據&#xff0c;如客戶、產品、銷售等&#xff0c;而不是像傳統數…

JavaScript學習18-css操作和事件處理程序(html/DOM0/DOM2)

一、css操作 第一種&#xff1a;容易出錯 第二種&#xff1a;有效避免錯誤 第三種&#xff1a; 二、事件處理程序 1.HTML事件 2.DOM0級事件處理 3.DOM2級事件處理

npm設置代理和取消代理

設置代理 具體代理端口要根據自己的來 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890取消代理 npm config delete proxy npm config delete https-proxy查看代理 npm config get proxy # 應返回 null npm config get…

從零開始訓練Codebook:基于ViT的圖像重建實踐

完整代碼在文末&#xff0c;可以一鍵運行。 1. 核心原理 Codebook是一種離散表征學習方法&#xff0c;其核心思想是將連續特征空間映射到離散的碼本空間。我們的實現方案包含三個關鍵組件&#xff1a; 1.1 ViT編碼器 class ViTEncoder(nn.Module):def __init__(self, codebo…

大數據筆試題_第一階段配套筆試題02

已知一個字符類型的日期&#xff1a;2022-01-20&#xff0c;請用SQL顯示出此日期對應的下個月的月份&#xff0c;結果要求為Number類型&#xff08;202201&#xff09;。 參考答案 sql SELECT to_date(2022-01-20, yyyy-mm-dd) a1,add_months(to_date(2022-01-20, yyyy-mm-d…

C++實現對象單例模式

在 C 中實現單例模式有多種方法&#xff0c;以下是線程安全的現代 C 實現方式&#xff08;推薦 C11 及以上版本&#xff09;&#xff1a; 1. Meyers’ Singleton&#xff08;推薦&#xff09; class Singleton { public:// 刪除拷貝構造和賦值運算符Singleton(const Singleto…

企業常用Linux服務搭建

1.需要兩臺centos 7服務器&#xff0c;一臺部署DNS服務器&#xff0c;另一臺部署ftp和Samba服務器。 2. 部署DNS 服務器? #!/bin/bash# 更新系統 echo "更新系統..." sudo yum update -y# 安裝 BIND 和相關工具 echo "安裝 BIND 和相關工具..." sudo y…

UE5Actor模塊源碼深度剖析:從核心架構到實踐應用

UE5 Actor模塊源碼深度剖析:從核心架構到實踐應用 a. UE5 Actor模塊架構概述 在UE5引擎中,Actor扮演著至關重要的角色,它是整個游戲世界中各類可交互對象的基礎抽象。從本質上來說,所有能夠被放置到關卡中的對象都屬于Actor的范疇,像攝像機、靜態網格體以及玩家起始位置…

DreamDiffusion代碼學習及復現

論文解讀在這里 File path | Description /pretrains ┣ &#x1f4c2; models ┃ ┗ &#x1f4dc; config.yaml ┃ ┗ &#x1f4dc; v1-5-pruned.ckpt┣ &#x1f4c2; generation ┃ ┗ &#x1f4dc; checkpoint_best.pth ┣ &#x1f4c2; eeg_pretain ┃ ┗ …

用Python實現TCP代理

依舊是Python黑帽子這本書 先附上代碼&#xff0c;我在原書代碼上加了注釋&#xff0c;更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string類型的輸入…

Pyinstaller 打包flask_socketio為exe程序后出現:ValueError: Invalid async_mode specified

Pyinstaller 打包flask_socketio為exe程序后出現&#xff1a;ValueError: Invalid async_mode specified 一、詳細描述問題描述 Traceback (most recent call last): File "app_3.py", line 22, in <module> File "flask_socketio\__init__.py"…

django REST framework(DRF)教程

Django DRF API Django 基本使用Django DRF序列化器Django DRF視圖Django DRF常用功能Django 基本使用 前后端分離開發模式認識RestFulAPI回顧Django開發模式Django REST Framework初探前后端分離開發模式 前后端分離前:前端頁面看到的效果都是由后端控制,即后端渲染HTML頁面…

【Linux】Orin NX + Ubuntu22.04配置國內源

1、獲取源 清華源 arm 系統的源,可以在如下地址獲取到 https://mirror.tuna.tsinghua.edu.cn/help/ubuntu-ports/ 選擇HTTPS,否則可能報錯: 明文簽署文件不可用,結果為‘NOSPLIT’(您的網絡需要認證嗎?)查看Orin NX系統版本 選擇jammy的源 2、更新源 1)備份原配…

【含文檔+PPT+源碼】基于微信小程序的社交攝影約拍平臺的設計與實現

項目介紹 本課程演示的是一款基于微信小程序的社交攝影約拍平臺的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系…

JDBC常用的接口

一、什么是JDBC JDBC是Java語言連接數據庫的接口規范。 二、JDBC的體系 1、Java官方提供一個操作數據庫的抽象接口 抽象接口有很多的接口和抽象類。 例如&#xff1a;Driver、Connection、Statement。 2、各個數據庫廠商提供各自的Java實現類 需要各自實現具體的細節。 例如&am…