Java 无法检索IP&;使用Ethernet Manager for Android的有线网络MAC地址
我已经为Android 4.4设备开发了一个应用程序,我正在尝试使用EthernetManager检索有线网络的IP地址和MAC地址。现在,当我试图在Android 5.1.1设备上运行此应用程序时,我没有得到IP地址和MAC地址。我已经提供了超级用户访问权限 我很难让它工作:Java 无法检索IP&;使用Ethernet Manager for Android的有线网络MAC地址,java,c#,android,xamarin.android,ethernet,Java,C#,Android,Xamarin.android,Ethernet,我已经为Android 4.4设备开发了一个应用程序,我正在尝试使用EthernetManager检索有线网络的IP地址和MAC地址。现在,当我试图在Android 5.1.1设备上运行此应用程序时,我没有得到IP地址和MAC地址。我已经提供了超级用户访问权限 我很难让它工作: public string GetInterfaceName()=>(string)ethernetManager.Class.GetMethod("getEthernetIfaceName").Invoke(et
public string GetInterfaceName()=>(string)ethernetManager.Class.GetMethod("getEthernetIfaceName").Invoke(ethernetManager);
错误日志:
2020-02-18 16:20:37.8485[INFO][4]HttpService-试图通过“GetWiredNetworkConfiguration”调用获取有线网络连接数据。
2020-02-18 16:20:37.9114[错误][4]HttpService-getEthernetFaceName[]
2020-02-18 16:20:37.9114[INFO][4]HttpServer-对请求/有线网络/配置的响应:
Java.Lang.NoSuchMethodException:GetEthernetInterfaceName[]
在Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod(Java.Interop.JniObjectReference实例,Java.Interop.JniMethodInfo方法,Java.Interop.JniArgumentValue*args)[0x0006e]中:0
在Java.Interop.jnipermembers+JniInstanceMethods.InvokeAbstractObjectMethod(System.String encodedMember,Java.Interop.IJavaPeerable self,Java.Interop.JniArgumentValue*参数)[0x00014]中:0
位于:0中的Java.Lang.Class.GetMethod(System.String名称,Java.Lang.Class[]参数类型)[0x00043]
位于PatientPoint.Droid.NetworkConfiguration.Wired.EthernetManagerProxy.GetInterfaceName()[0x00015]中的:0
位于PatientPoint.Droid.NetworkConfiguration.Wired.WiredNetworkConnectionProvider.GetWiredNetworkConfiguration()[0x00000]处,位于:0
位于:0中的Deadpool.Droid.Core.HttpService.GetWiredNetworkConfiguration()[0x00015]处
---托管Java.Lang.NoSuchMethodException堆栈跟踪结束---
java.lang.NoSuchMethodException:GetEthernetInterfaceName[]
位于java.lang.Class.getMethod(Class.java:664)
位于java.lang.Class.getMethod(Class.java:643)
获取MAC地址的函数:
private string GetMacAddress(string interfaceName)
{
var ethernetInterface = NetworkInterface.GetByName(interfaceName);
if (ethernetInterface != null)
{
var bytes = ethernetInterface.GetHardwareAddress();
if (bytes != null)
{
var result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append($"{bytes[i]:X2}");
if (i != bytes.Length - 1)
{
result.Append(":");
}
}
return result.ToString();
}
}
return "Not Available";
}
私有字符串GetMacAddress(字符串接口名)
{
var ethernetInterface=NetworkInterface.GetByName(interfaceName);
if(ethernetInterface!=null)
{
var bytes=ethernetInterface.GetHardwareAddress();
如果(字节数!=null)
{
var result=新的StringBuilder();
for(int i=0;i
请告知上述方法是否适用于Android 4.4,或者我是否必须为Android 5.1.1使用其他方法,或者我在这里做错了什么?如果您想获取Android设备的mac地址,可以尝试下面的代码。我没有安卓4.4和5.1.1,我在没有许可的情况下在安卓6.0上测试,效果很好
public static string getMacAddress()
{
string macAddress = string.Empty;
var all = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces);
foreach (var interfaces in all)
{
if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("wlan0")) continue;
var macBytes = (interfaces as
Java.Net.NetworkInterface).GetHardwareAddress();
if (macBytes == null) continue;
var sb = new System.Text.StringBuilder();
foreach (var b in macBytes)
{
string convertedByte = string.Empty;
convertedByte = (b & 0xFF).ToString("X2") + ":";
if (convertedByte.Length == 1)
{
convertedByte.Insert(0, "0");
}
sb.Append(convertedByte);
}
macAddress = sb.ToString().Remove(sb.Length - 1);
return macAddress;
}
return "02:00:00:00:00:00";
}
从代码中获取:
从Android设备获取:
我从类似的线程中获得代码: