Получите MAC-адрес устройства Android без Wi-Fi

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

ИЗМЕНИТЬ

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

Ответ 1

Чтение/sys/class/net/[something]/address в виде текстового файла

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

Ответ 2

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

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

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

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

Ответ 3

См. это сообщение, где я представил пример Utils.java для реализации pure-java.

Utils.getMACAddress("wlan0");
Utils.getMACAddress("eth0");
Utils.getIPAddress(true); // IPv4
Utils.getIPAddress(false); // IPv6 

Ответ 4

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

Ответ 5

Чтобы получить MAC-адрес Wi-Fi устройства Android с помощью adb: 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();