プログラムで Android デバイスの Mac Id を取得するにはどうすればよいですか。私は IMIE コードを使用しており、デバイスの Mac ID を手動で確認する方法は知っていますが、プログラムで確認する方法はわかりません。
8 に答える
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String macAddress = wInfo.getMacAddress();
また、マニフェスト ファイルに以下のアクセス許可を追加します。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Android 6.0 の変更点を参照してください。
ユーザーにより優れたデータ保護を提供するために、このリリース以降、Android は、Wi-Fi および Bluetooth API を使用するアプリのデバイスのローカル ハードウェア識別子へのプログラムによるアクセスを削除します。WifiInfo.getMacAddress() および BluetoothAdapter.getAddress() メソッドは、02:00:00:00:00:00 の定数値を返すようになりました。
Bluetooth および Wi-Fi スキャンを介して近くの外部デバイスのハードウェア識別子にアクセスするには、アプリに ACCESS_FINE_LOCATION または ACCESS_COARSE_LOCATION 権限が必要です。
純粋な Java 実装を提供し、WifiManager なしで動作する Utils.java の例を提出したこの投稿を参照してください。一部の Android デバイスでは、Wi-Fi が利用できないか、イーサネット配線を使用している可能性があります。
Utils.getMACAddress("wlan0");
Utils.getMACAddress("eth0");
Utils.getIPAddress(true); // IPv4
Utils.getIPAddress(false); // IPv6
このコードを使用すると、 Android 6.0 でもMacAddress を取得できます。
public static String getMacAddr() {
try {
List <NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif: all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b: macBytes) {
//res1.append(Integer.toHexString(b & 0xFF) + ":");
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {}
return "02:00:00:00:00:00";
}
EDIT 1. この回答には、16進形式の1桁のバイトがその前に「0」が付いていないというバグがありました。res1 への追加は、それを処理するように変更されました。