android 获取网卡mac_Android获取网卡信息(含MAC和IP)

功能已封装好见Utils.java,具体使用如下。

使用方法

Utils.getIPAddress(true); // IPv4

Utils.getIPAddress(false); // IPv6

Utils.getMACAddress("wlan0"));//MAC wlan0

Utils.getMACAddress("eth0");//MAC eth0

权限

Utils.java

package com.tastemiss.ti.nfc;

/**

* Created by Ti on 2016/08/13.

*/

import android.nfc.NfcAdapter;

import android.support.v7.app.AlertDialog;

import android.view.Gravity;

import android.widget.Toast;

import java.io.*;

import java.net.*;

import java.util.*;

//import org.apache.http.conn.util.InetAddressUtils;

public class Utils {

/**

* Convert byte array to hex string

* @param bytes

* @return

*/

public static String bytesToHex(byte[] bytes) {

StringBuilder sbuf = new StringBuilder();

for(int idx=0; idx < bytes.length; idx++) {

int intVal = bytes[idx] & 0xff;

if (intVal < 0x10) sbuf.append("0");

sbuf.append(Integer.toHexString(intVal).toUpperCase());

}

return sbuf.toString();

}

/**

* Get utf8 byte array.

* @param str

* @return array of NULL if error was found

*/

public static byte[] getUTF8Bytes(String str) {

try { return str.getBytes("UTF-8"); } catch (Exception ex) { return null; }

}

/**

* Load UTF8withBOM or any ansi text file.

* @param filename

* @return

* @throws java.io.IOException

*/

public static String loadFileAsString(String filename) throws java.io.IOException {

final int BUFLEN=1024;

BufferedInputStream is = new BufferedInputStream(new FileInputStream(filename), BUFLEN);

try {

ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFLEN);

byte[] bytes = new byte[BUFLEN];

boolean isUTF8=false;

int read,count=0;

while((read=is.read(bytes)) != -1) {

if (count==0 && bytes[0]==(byte)0xEF && bytes[1]==(byte)0xBB && bytes[2]==(byte)0xBF ) {

isUTF8=true;

baos.write(bytes, 3, read-3); // drop UTF8 bom marker

} else {

baos.write(bytes, 0, read);

}

count+=read;

}

return isUTF8 ? new String(baos.toByteArray(), "UTF-8") : new String(baos.toByteArray());

} finally {

try{ is.close(); } catch(Exception ex){}

}

}

/**

* Returns MAC address of the given interface name.

* @param interfaceName eth0, wlan0 or NULL=use first interface

* @return mac address or empty string

*/

public static String getMACAddress(String interfaceName) {

try {

List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

for (NetworkInterface intf : interfaces) {

if (interfaceName != null) {

if (!intf.getName().equalsIgnoreCase(interfaceName)) continue;

}

byte[] mac = intf.getHardwareAddress();

if (mac==null) return "";

StringBuilder buf = new StringBuilder();

for (int idx=0; idx

buf.append(String.format("%02X:", mac[idx]));

if (buf.length()>0) buf.deleteCharAt(buf.length()-1);

return buf.toString();

}

} catch (Exception ex) { } // for now eat exceptions

return "";

/*try {

// this is so Linux hack

return loadFileAsString("/sys/class/net/" +interfaceName + "/address").toUpperCase().trim();

} catch (IOException ex) {

return null;

}*/

}

/**

* Get IP address from first non-localhost interface

* @param ipv4 true=return ipv4, false=return ipv6

* @return address or empty string

*/

public static String getIPAddress(boolean useIPv4) {

try {

List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());

for (NetworkInterface intf : interfaces) {

List addrs = Collections.list(intf.getInetAddresses());

for (InetAddress addr : addrs) {

if (!addr.isLoopbackAddress()) {

String sAddr = addr.getHostAddress();

//boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);

boolean isIPv4 = sAddr.indexOf(':')<0;

if (useIPv4) {

if (isIPv4)

return sAddr;

} else {

if (!isIPv4) {

int delim = sAddr.indexOf('%'); // drop ip6 zone suffix

return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();

}

}

}

}

}

} catch (Exception ex) { } // for now eat exceptions

return "";

}

}

注:代码来自网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Delphi中,想要获取Android设备上的网卡信息,可以通过使用Java的相关类和方法来实现。 首先,需要使用Java的反射机制来获取相关的类。可以通过使用`JNIClasses`单元来调用Java的类和方法。例如,通过`TJNetworkInterface`类可以获取到设备的网卡信息。 接下来,可以使用`getNetworkInterfaces`方法来获取所有的网卡接口。例如: ```delphi var NetworkInterfaces: JEnumeration; NetworkInterface: JNetworkInterface; begin NetworkInterfaces := TJNetworkInterface.JavaClass.getNetworkInterfaces; while NetworkInterfaces.hasMoreElements do begin NetworkInterface := TJNetworkInterface.Wrap(NetworkInterfaces.nextElement); // 对NetworkInterface进行操作,以获取网卡相关信息 ... end; end; ``` 通过遍历`NetworkInterfaces`获取到的网卡接口对象,可以获取到各个网卡的相关信息。例如,可以使用`getName`方法获取网卡的名称,使用`getDisplayName`方法获取网卡的显示名称,使用`getHardwareAddress`方法获取网卡的硬件地址等。 ```delphi var Name: JString; DisplayName: JString; HardwareAddress: TJavaArray<Byte>; begin Name := NetworkInterface.getName; DisplayName := NetworkInterface.getDisplayName; HardwareAddress := NetworkInterface.getHardwareAddress; // 对获取到的信息进行操作,如输出到控制台或显示在应用界面中 ... end; ``` 通过上述方法,可以在Delphi中获取Android设备上的网卡信息,并进行相应操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值