Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法检索IP&;使用Ethernet Manager for Android的有线网络MAC地址_Java_C#_Android_Xamarin.android_Ethernet - Fatal编程技术网

Java 无法检索IP&;使用Ethernet Manager for Android的有线网络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

我已经为Android 4.4设备开发了一个应用程序,我正在尝试使用EthernetManager检索有线网络的IP地址和MAC地址。现在,当我试图在Android 5.1.1设备上运行此应用程序时,我没有得到IP地址和MAC地址。我已经提供了超级用户访问权限

我很难让它工作:

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设备获取:

我从类似的线程中获得代码: