完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
需求:
最新经常有客户问在哪里可以查看以太网的MAC地址,由于Android原生系统更多应用于手机等使用WIFI环境的手持设备,没有以太网相关信息很正常,我们在状态信息下直接加一栏以太网的MAC地址信息; 方法: 参考WLANMAC地址,编写xml代码; 文件:package/app/Settings/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 704b3bb..f50ad22 100755 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -1059,6 +1059,7 @@ + diff --git a/res/values/strings.xml b/res/values/strings.xml index 712fa4f..4e60f86 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2442,6 +2442,7 @@ + diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml old mode 100644 new mode 100755 index a0b7590..b2e85a6 --- a/res/xml/device_info_status.xml +++ b/res/xml/device_info_status.xml @@ -53,6 +53,12 @@ android: android:summary="@string/device_info_not_available" android: /> + + android: + android: + android: + android:summary="@string/device_info_not_available" + android: /> android: android: Android没有提供获取以太网MAC地址的API,但是通过adb可以获取以太网MAC地址; ADB获取以太网MAC地址两个不同的命令: cat /sys/class/net/eth0/address busybox ifconfig eth0 | grep 'HWaddr' | busybox awk '{print $5}' 小知识:ADB获取WLAN MAC地址两个不同的命令: cat /sys/class/net/wlan0/address busybox ifconfig wlan0 | grep 'HWaddr' | busybox awk '{print $5}' 最后通过RootCmd工具类调用adb命令,附上patch; diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java old mode 100644 new mode 100755 index 1ba3978..15387bb --- a/src/com/android/settings/deviceinfo/Status.java +++ b/src/com/android/settings/deviceinfo/Status.java @@ -45,6 +45,10 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import java.lang.ref.WeakReference; +import java.io.IOException; +import java.io.DataOutputStream; +import java.io.DataInputStream; +import android.util.Log; /** * Display the following information @@ -55,7 +59,7 @@ import java.lang.ref.WeakReference; * */ public class Status extends SettingsPreferenceFragment { - + private static final String TAG = "Status"; private static final String KEY_BATTERY_STATUS = "battery_status"; private static final String KEY_BATTERY_LEVEL = "battery_level"; private static final String KEY_IP_ADDRESS = "wifi_ip_address"; @@ -65,7 +69,7 @@ public class Status extends SettingsPreferenceFragment { private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address"; private static final String KEY_SIM_STATUS = "sim_status"; private static final String KEY_IMEI_INFO = "imei_info"; - + private static final String KEY_ETH_MAC_ADDRESS = "eth_mac_address"; // Broadcasts to listen to for connectivity changes. private static final String[] CONNECTIVITY_INTENTS = { BluetoothAdapter.ACTION_STATE_CHANGED, @@ -93,7 +97,7 @@ public class Status extends SettingsPreferenceFragment { private Preference mIpAddress; private Preference mWifiMacAddress; private Preference mWimaxMacAddress; - + private Preference mEthMacAddress; private Handler mHandler; private static class MyHandler extends Handler { @@ -170,7 +174,7 @@ public class Status extends SettingsPreferenceFragment { mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS); mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS); mIpAddress = findPreference(KEY_IP_ADDRESS); - + mEthMacAddress = findPreference(KEY_ETH_MAC_ADDRESS); mRes = getResources(); mUnknown = mRes.getString(R.string.device_info_default); mUnavailable = mRes.getString(R.string.status_unavailable); @@ -283,7 +287,61 @@ public class Status extends SettingsPreferenceFragment { String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress(); mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable); } + private void setEthStatus() { + String macAddress = getMacAddress("eth0"); + mEthMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable); + } + + private String getMacAddress(String iface) { + String cmd = "busybox ifconfig "+iface+" | grep 'HWaddr' | busybox awk '{print $5}'"; + String str = execRootCmd(cmd); + if(str != null ) + { + return str; + } + return null; + } + public static String execRootCmd(String cmd) { + String result = ""; + DataOutputStream dos = null; + DataInputStream dis = null; + try { + Process p = Runtime.getRuntime().exec("su");// The Android system processed by root has Su command + dos = new DataOutputStream(p.getOutputStream()); + dis = new DataInputStream(p.getInputStream()); + + Log.i(TAG, cmd); + dos.writeBytes(cmd + "n"); + dos.flush(); + dos.writeBytes("exitn"); + dos.flush(); + String line = null; + while ((line = dis.readLine()) != null) { + Log.d("result", line); + result += line; + } + p.waitFor(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (dos != null) { + try { + dos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (dis != null) { + try { + dis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return result; + } private void setIpAddressStatus() { String ipAddress = Utils.getDefaultIpAddresses(this.mCM); if (ipAddress != null) { @@ -309,6 +367,7 @@ public class Status extends SettingsPreferenceFragment { void updateConnectivity() { setWimaxStatus(); setWifiStatus(); + setEthStatus(); setBtStatus(); setIpAddressStatus(); } 效果图: 小知识:Linux awk 命令 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
从性能到成本,深度剖析 RK3588 与 RK3576 怎么选
370 浏览 0 评论
RK3588 原厂设计资料首次公开(规格书+原理图+设计说明+DDR参考),速抢
1262 浏览 0 评论
1001 浏览 0 评论
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
3472 浏览 0 评论
3341 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-11 21:49 , Processed in 0.708956 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号