Android Studio的代码笔记

您所在的位置:网站首页 笔记mac地址 Android Studio的代码笔记

Android Studio的代码笔记

2024-07-15 03:03| 来源: 网络整理| 查看: 265

关于获取设备SN序列号、MAC地址、IP地址的学习代码 SN序列号获取SN序列号 MAC地址获取MAC地址 IP、wlanIP、wlanMAC、网络、ping获取以太网的IP地址获取设备wlan的IP地址获取wlan的MAC地址判断当前网络是否可以用判断ping一个xx地址是否能ping通 命令 busybox ifconfig 和 命令 netcfg总结

SN序列号

SN码是Serial Number的缩写,有时也叫SerialNo,也就是产品序列号,产品序列是为了验证“产品的合法身份”而引入的一个概念,它是用来保障用户的正版权益,享受合法服务的;一套正版的产品只对应一组产品序列号。SN码别称:机器码、认证码、注册申请码等。

获取SN序列号 /** * @LXH 获取设备的SN序列号 * @return SN序列号 */ public String get_SN() { String serial_n = ""; try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+ serial_n = Build.getSerial(); } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+ serial_n = Build.SERIAL;//android.os.Build.SERIAL } else {//8.0- Class c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class); serial_n = (String) get.invoke(c, "ro.serialno"); } } catch (Exception e) { e.printStackTrace(); Log.e("LXH", "读取设备序列号异常:" + e.toString()); } Log.i("LXH","设备的SN序列号:"+serial_n); return serial_n; }

适用各个版本,有提示添加权限如下,但是我没加这个权限时也可以运行成功

MAC地址

MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 [1] 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。 MAC地址是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。

获取MAC地址 /** * @LXH 获取设备的MAC地址 * MAC地址=局域网地址=MAC位址=以太网地址=或物理地址 * @return MAC地址 */ public String get_MAC() { String ethernet_mac = null; BufferedReader bufferedReader_mac = null; FileReader fileReader_mac = null; try { fileReader_mac = new FileReader("sys/class/net/eth0/address"); bufferedReader_mac = new BufferedReader(fileReader_mac); ethernet_mac = bufferedReader_mac.readLine(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (bufferedReader_mac != null) bufferedReader_mac.close(); if (fileReader_mac != null) fileReader_mac.close(); } catch (IOException e) { e.printStackTrace(); Log.e("LXH", "读取设备MAC地址异常:" + e.toString()); } } Log.i("LXH","设备的MAC地址:"+ethernet_mac); return ethernet_mac; }

获取的MAC地址就是有线网络的地址,即物理地址

IP、wlanIP、wlanMAC、网络、ping

因为要访问网络,所以要添加网络权限,没有添加权限会得到null

获取以太网的IP地址 /** * @LXH 获取设备以太网的IP地址 * @return 以太网的IP地址 */ public String get_ethernet_IP() { String ethernet_IP = null; try { Enumeration nis = NetworkInterface.getNetworkInterfaces(); while (nis.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) nis.nextElement(); Enumeration ias = ni.getInetAddresses(); while (ias.hasMoreElements()) { InetAddress ia = ias.nextElement(); if (ia instanceof Inet6Address) { continue; } String hostAddress = ia.getHostAddress(); if (!"127.0.0.1".equals(hostAddress)) { ethernet_IP = hostAddress; break; } } } } catch (SocketException e) { e.printStackTrace(); } Log.i("LXH","设备以太网的IP地址:"+ethernet_IP); return ethernet_IP; } 获取设备wlan的IP地址 /** * @LXH 获取设备wlan的IP地址 * @return wlan的IP地址 */ public String get_wlan_IP() { String wlan_IP=""; List interfaces = null; try { interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface networkInterface : interfaces) { if (networkInterface != null && TextUtils.isEmpty(networkInterface.getName()) == false) { if ("wlan0".equalsIgnoreCase(networkInterface.getName())) { Enumeration enumIpAddr = networkInterface.getInetAddresses(); while (enumIpAddr.hasMoreElements()) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { wlan_IP=inetAddress.getHostAddress(); Log.i("LXH","设备wlan的IP地址:"+wlan_IP); return wlan_IP; } } } } } } catch (SocketException e) { e.printStackTrace(); } return wlan_IP; } 获取wlan的MAC地址 /** * @LXH 获取wlan的MAC地址 * @return wlan0的mac地址 */ public String get_wlan_MAC() { String wlan_MAC=""; List interfaces = null; try { interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface networkInterface : interfaces) { if (networkInterface != null && TextUtils.isEmpty(networkInterface.getName()) == false) { if ("wlan0".equalsIgnoreCase(networkInterface.getName())) { byte[] macBytes = networkInterface.getHardwareAddress(); if (macBytes != null && macBytes.length > 0) { StringBuilder str = new StringBuilder(); for (byte b : macBytes) { str.append(String.format("%02X:", b)); } if (str.length() > 0) { str.deleteCharAt(str.length() - 1); } wlan_MAC=str.toString(); Log.i("LXH","设备wlan的MAC地址:"+wlan_MAC); return wlan_MAC; } } } } } catch (SocketException e) { e.printStackTrace(); } return wlan_MAC; }

wlan的mac地址需要添加如下权限,否则会报错。

判断当前网络是否可以用 /** * @LXH 判断当前网络是否可以用 * @return boolean */ public boolean is_Network() { boolean is_network = false; ConnectivityManager manager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); if (manager == null) { return false; } NetworkInfo networkInfo = manager.getActiveNetworkInfo(); is_network= networkInfo != null && networkInfo.isConnected(); Log.i("LXH","当前网络是否可以用:"+is_network); return is_network; }

网络可用不代表能上网,但是可以与同网段的通信

判断ping一个xx地址是否能ping通 /** * @LXH 判断ping一个xx地址是否能ping通 * @param ip * @return boolean */ public boolean is_PingIP(String ip) { boolean pingIP = false; try {//-c 1是指ping的次数为1次,-w 3是指超时时间为3s Process process = Runtime.getRuntime().exec("ping -c 1 -w 3 " + ip); int status = process.waitFor(); if (status == 0) {//status为0表示ping成功 pingIP=true; Log.i("LXH","ping "+ip+" 是否成功:"+pingIP); return pingIP; } }catch (InterruptedException | IOException e) { e.printStackTrace(); } Log.i("LXH","ping "+ip+" 是否成功:"+pingIP); return pingIP; }

运行日志 在这里插入图片描述

命令 busybox ifconfig 和 命令 netcfg

在终端下输入adb shell进入android的终端

busybox ifconfig

显示或配置网络设备(网络接口卡)的命令,在android中的ifconfig 在这里插入图片描述只截取了有线网口的信息,实际会显示所有的网络接口信息,可以根据信息对比判断试是否得到正确的信息

netcfg

在这里插入图片描述第一项为网卡接口类型,第二项为打开关闭状态,第三项为分配的ip地址,第四项为接口标志,第五项为硬件地址。netcfg的源码在系统下位置为:platform/systom/core/netcfg/netcfg.c 有看到一篇分析这个源码的link.有空可以看看

总结

还是得多看大佬的代码,逻辑和习惯得改 欢迎指错,一起学习鸭



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3