Невозможно получить IP & MA C адрес для проводной сети, используя Ethe rnet Manager для Android - PullRequest
0 голосов
/ 21 февраля 2020

Я разработал приложение для устройства Android 4.4, в котором я пытаюсь получить IP-адрес и адрес MA C, используя EthernetManager для проводной сети. Теперь, когда я пытаюсь запустить это приложение на устройстве Android 5.1.1, я не получаю IP-адрес и адрес MA C. Я уже предоставил доступ суперпользователя.

У меня проблемы с получением этой работы:

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 - getEthernetIfaceName [] 2020-02-18 16: 20: 37.9114 [ИНФО] [4] HttpServer - Ответ на запрос / проводную сеть / конфигурацию: Java .Lang.NoSuchMethodException: getEthernetIfaceName [] в Java .Interop.JniEnvironment + InstanceMethods.CallObjectMethod (Java .Interop.JniObjectReference экземпляр, Java .Interop.Jniment0). ) [0x0006e] in: 0 в Java .Interop.JniPeerMembers + JniInstanceMethods.InvokeAbstractObjectMethod (закодированный элемент System.String, Java .Interop.IJavaPeerable self, Java .Interop.Jni01uegual: 0 0) [0] 0 0) в Java .Lang.Class.GetMethod (имя System.String, Java .Lang.Class [] parameterTypes) [0x00043] в: 0 в PatientPoint.Droid.NetworkConfiguration.Wired.EthernetManagerProxy.GetInterfaceName () [0x00015] в <3433561ce2794b26999a934f0ccf7c2a>: 0 в PatientPoint.Droid.NetworkConfiguration.Wired.WiredNetworkConnectionProvider.GetWiredNetworkConfiguration () [0x 00000] в <3433561ce2794b26999a934f0ccf7c2a>: 0 в Deadpool.Droid.Core.HttpService.GetWiredNetworkConfiguration () [0x00015] в <33f384394b3e44efac7c863885fc43f1>: 0 --- 10-го класса *. .lang.NoSuchMethodException: getEthernetIfaceName [] в java .lang.Class.getMethod (Class. java: 664) в java .lang.Class.getMethod (Class. java: 643)

Функция для получения МА C Адрес:

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";
}

Пожалуйста, сообщите, работает ли вышеуказанный метод для Android 4.4 или мне нужно использовать какой-то другой метод для Android 5.1.1 или я здесь что-то не так делаю?

1 Ответ

0 голосов
/ 24 февраля 2020

Если вы хотите получить ма c адрес устройства android, вы можете попробовать код ниже. У меня нет Android 4.4 и 5.1.1, я тестирую на Android 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";
    }

Получить из кода:

enter image description here

Получить от Android устройства:

enter image description here

Я получаю код из аналогичной темы: { ссылка }

...