Используйте следующий код в Java, чтобы получить его программно:

не получить MAC-адрес сетевого интерфейса устройства Android, у которого нет Wi-Fi-интерфейса (например, эмулятора Android)? WifiInfo, полученный через WifiManager, возвращаетзначение NULL.

РЕДАКТИРОВАТЬ

Чтобы быть более понятным: мне нужно связаться с существующим сетевым протоколом (не разработанным мной) в локальной сети, где я должен отправить mac-адрес коммуникационного интерфейса внутри полезной нагрузки во время фазы регистрации.

 Chris Stratton01 июн. 2011 г., 00:15
Внешнее устройство в любом случае не сможет увидеть настоящий mac-адрес, поскольку на пути есть NAT (ПК), в чем разница между его обнаружением и созданием одного (с локально управляемым битом)?
 Tom01 июн. 2011 г., 09:41
Это касается только эмуляторов. Как насчет устройств Android с интерфейсом Ethernet (проводная сеть).
 Android Developer13 дек. 2017 г., 12:23
Я разместил здесь рабочее решениеstackoverflow.com/a/47789324/5330408
 Tom01 июн. 2011 г., 12:58
Оказалось, что протокол явно не требует действительный mac-адрес, а уникальный идентификатор. Существующая реализация просто использовала mac-адрес в качестве этого идентификатора, поэтому я предположил, что это необходимо. Вот почему ответ Александра Лукаса об уникальных идентификаторах лучше всего подходит к моей ситуации. Однако я думаю, что вопрос получения MAC-адреса для устройств без Wi-Fi может быть все еще интересен для других, поэтому я отметил ответ Криса Страттона как лучший.
 Tom31 мая 2011 г., 23:40
Я отредактировал свой вопрос, чтобы быть более понятным

Ответы на вопрос(5)

что вам нужен этот MAC-адрес, чтобы установить уникальный идентификатор для устройства. Адреса Mac не способ сделать это.

Есть блог для разработчиков Android под названием "Определение установок приложений"который довольно хорошо охватывает тему генерации уникальных идентификаторов, включая популярные методы и плюсы и минусы. Это определенно стоит прочитать. Для этого поста важна следующая цитата:

Может быть возможно получить Mac-адрес с устройства WiFi или Bluetooth устройства. Мы не рекомендуем использовать это как уникальный идентификатор. Начнем с того, что не на всех устройствах есть WiFi. Кроме того, если WiFi не включен, оборудование может не сообщать адрес Mac.

Вместо этого доступны следующие параметры: TelephonyManager.getDeviceId (), android.os.Build.SERIAL и Settings.Secure.ANDROID_ID, все они более подробно описаны в связанном посте.

 derekerdmann18 мая 2012 г., 20:05
android.os.Build.SERIAL доступно только в Android 2.3 и более поздних версиях.
 Tom31 мая 2011 г., 23:34
Извините, это не относится к тому, что мне нужно. Я должен связаться с существующим протоколом (не реализованным мной), где я должен отправить свой локальный mac-адрес в полезной нагрузке во время фазы регистрации.
 Pascal20 нояб. 2012 г., 17:03
Большое спасибо за этот ответ: именно то, что мне нужно.

adb shell getprop ril.wifi_macaddr

Используйте следующий код в Java, чтобы получить его программно:

Process p = Runtime.getRuntime.exec("adb", "shell", "getprop", "ril.wifi_macaddr")
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream());
String macAddress = br.readLine();

вы, конечно, не можете получить MAC-адрес устройства Wi-Fi. Он представляет физическое оборудование, и если его нет, его просто не существует.

 Tom31 мая 2011 г., 23:36
Да, это правда, что MAC-адрес интерфейса Wi-Fi просто не существует. Но вопрос в том, как получить MAC-адрес для интерфейса, который в конечном итоге отправляет сообщение (например, это может быть интерфейс Ethernet или виртуальный интерфейс в эмуляторе).

Смотрите этот пост где я представил пример Utils.java для обеспечения реализации чисто Java.

Utils.getMACAddress("eth0");
Utils.getIPAddress(true); // IPv4
Utils.getIPAddress(false); // IPv6 
 Yeung24 дек. 2014 г., 09:02
Вы обеспечиваете эту работу без включения Wi-Fi?
 Yeung08 янв. 2015 г., 10:09
Нет !! Чтобы получить Wi-Fi MAC-адрес. Я должен хотя бы включить Wi-Fi один раз, используя этот метод. Когда я используюUtils.getMACAddress("wlan0"); после того, как устройство только загрузится, оно возвращает поддельный адрес.
Решение Вопроса

Но вряд ли это будет полезно в вашем мышлении.

 Tirtha09 окт. 2012 г., 17:20
Для меня это работает, если я заменяю [что-то] на «eth0». Большое спасибо за то, что поделились этим.
 Chris Stratton09 июн. 2014 г., 19:00
Причина, по которой он «вряд ли будет полезен», заключается в том, что устройства Android обычно отстают от NAT, что делает их фактический MAC-адрес клиента неактуальным - вы можете указать любое случайное число, постоянное для разных сеансов или не по вашему усмотрению.

Ваш ответ на вопрос