100

Java を使用して Android デバイスの MAC アドレスを取得する必要があります。オンラインで検索しましたが、有用なものは見つかりませんでした。

4

13 に答える 13

122

コメントで既に指摘したように、MAC アドレスはWifiManager経由で受け取ることができます。

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String address = info.getMacAddress();

また、適切な権限をAndroidManifest.xml

<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 権限が必要です。

于 2012-07-29T01:32:42.057 に答える
40

MAC アドレスの取得はWifiInfo.getMacAddress()Marshmallow 以降では機能しません。無効になっているため、定数値02:00:00:00:00:00が返されます。

于 2016-02-25T23:03:54.587 に答える
30
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(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";
}
于 2016-09-30T12:53:55.197 に答える
11
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

public String getMacAddress(Context context) {
    WifiManager wimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    String macAddress = wimanager.getConnectionInfo().getMacAddress();
    if (macAddress == null) {
        macAddress = "Device don't have mac address or wi-fi is disabled";
    }
    return macAddress;
}

他の人がここにいる

于 2013-03-04T14:35:45.413 に答える
9

そのマシュマロでの作業

package com.keshav.fetchmacaddress;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e("keshav","getMacAddr -> " +getMacAddr());
    }

    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) + ":");
                }

                if (res1.length() > 0) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                return res1.toString();
            }
        } catch (Exception ex) {
            //handle exception
        }
        return "";
    }
}
于 2017-06-15T12:09:00.750 に答える
4

Android デバイスのハードウェア MAC アドレスを取得できなくなりました。WifiInfo.getMacAddress() および BluetoothAdapter.getAddress() メソッドは 02:00:00:00:00:00 を返します。この制限は Android 6.0 で導入されました。

しかし、Rob Anderson は < Marshmallow で機能するソリューションを見つけました: https://stackoverflow.com/a/35830358

于 2016-09-02T11:25:38.853 に答える
3

MACアドレスを取得できます:

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String mac = wInfo.getMacAddress();

Menifest.xml で権限を設定する

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
于 2014-07-16T11:10:33.930 に答える
3

この簡単な方法を使用して

WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            String WLANMAC = wm.getConnectionInfo().getMacAddress();
于 2019-04-04T07:25:16.417 に答える
2

こちらのAndroidソースから取得。これは、システムの設定アプリで MAC アドレスを表示する実際のコードです。

private void refreshWifiInfo() {
    WifiInfo wifiInfo = mWifiManager.getConnectionInfo();

    Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS);
    String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
    wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress
            : getActivity().getString(R.string.status_unavailable));

    Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS);
    String ipAddress = Utils.getWifiIpAddresses(getActivity());
    wifiIpAddressPref.setSummary(ipAddress == null ?
            getActivity().getString(R.string.status_unavailable) : ipAddress);
}
于 2013-12-11T15:41:56.273 に答える
-1

このコマンドは、Termux で wifi ハードウェア アドレスを決定する方法ip link | grep -A1 wlan0の Android 9 で機能します。

于 2019-12-19T09:18:26.047 に答える
-3

LOCATION パーミッションなしで MAC アドレスを読み取る方法を見つけたと思いip linkます。その出力を実行して解析します。(おそらく、このバイナリのソース コードを見て同様のことができます)

于 2018-01-19T08:14:28.133 に答える