getMacAddress()返回null

时间:2015-07-23 07:23:14

标签: android android-wifi

这是我使用的代码段

public static String getMACAddressOfDevice(Context context){
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        String macAddress = wifiInfo.getMacAddress();
        return macAddress;
    }

有时它返回null。我不明白为什么! 有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

wifi 关闭时,某些Android设备返回null。

目前的设计。

如果设备没有wifi硬件,那么这种方法不起作用。

还有一些其他替代方案可用于设备的唯一识别

<强> IMEI:

TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String m_deviceId = TelephonyMgr.getDeviceId();

缺点:

这是SIM卡依赖所以

  • 如果没有SIM卡,我们就注定了

  • 如果有双卡,那么我们就可以了。

蓝牙地址:

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
   String m_bluetoothAdd = m_BluetoothAdapter.getAddress();

缺点:

  • 如果没有蓝牙硬件,我们就注定了。
  • 将来在某些新设备中,如果关闭它们,我们就无法读取它。

<强>串行:

我们可以读取硬件序列号。可以在设备设置中看到。

 Build.SERIAL

缺点:

  • 如果设备没有电话,则无法使用。市场上有一些仅限wifi 设备。< / LI>

<强> Android_ID:

您可以尝试使用 ANDROID_ID 来识别设备,因为它不依赖于任何硬件 IMEI

String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

缺点:

  • 如果操作系统版本已升级,则可能会更改
  • 如果设备已植根,则会更改
  • 不保证device_id是唯一的,有些报告称某些制造商有重复的device_id

<强>建议:

最安全的选择是使用 Android_ID ,因为它不依赖于任何硬件的可用性

Reference