Java 通过WifiManager获取android设备的恒定mac地址时出错
我正试图通过WifiManager获得使用Java的android设备的MacAddressJava 通过WifiManager获取android设备的恒定mac地址时出错,java,android,Java,Android,我正试图通过WifiManager获得使用Java的android设备的MacAddress public String getMacAdress(Context context){ WifiManager wifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE); String macAdress=wifiManager.getConnectionInfo().getMacAddress(
public String getMacAdress(Context context){
WifiManager wifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
String macAdress=wifiManager.getConnectionInfo().getMacAddress();
if(macAdress==null){
macAdress="Device don't have mac address or wi-fi is disabled";
}
return macAdress;
}
但它返回的是02:00:00:00:00的常量值。
我设置了以下权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
自API 23以来,getMacAddress()
返回一个常量值,而不是实际的MAC地址。这是出于安全和隐私目的。如果您有较旧的设备,您将获得实际的MAC地址,前提是这些设备在您的minSdkVersion
到targetSdkVersion
范围内从Android 6.0或更高版本开始,API将为您提供02:00:00:00:00的MAC地址。请参阅下文:
访问硬件标识符为用户提供更好的数据保护,从本版本开始,Android将删除
使用访问应用程序的设备本地硬件标识符
Wi-Fi和蓝牙API
WifiInfo.getMacAddress()和
BluetoothAdapter.getAddress()方法现在返回一个常量值02:00:00:00
请尝试以下代码:
public String getMacAddress() {
try {
List<NetworkInterface> ifaceList = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface iface : ifaceList) {
if (iface == null) {
continue;
}
if (!iface.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] macBytes = iface.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder macSb = new StringBuilder();
for (byte bytes : macBytes) {
macSb.append(String.format("%02X:", bytes));
}
if (macSb.length() == 0) {
return "";
}
macSb.deleteCharAt(macSb.length() - 1);
return macSb.toString();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
公共字符串getMacAddress(){
试一试{
List ifaceList=Collections.List(NetworkInterface.getNetworkInterfaces());
用于(网络接口iface:ifaceList){
if(iface==null){
继续;
}
如果(!iface.getName().equalsIgnoreCase(“wlan0”)){
继续;
}
byte[]macBytes=iface.getHardwareAddress();
if(macBytes==null){
返回“”;
}
StringBuilder macSb=新的StringBuilder();
用于(字节:macBytes){
macSb.append(String.format(“%02X:”,字节));
}
如果(macSb.length()==0){
返回“”;
}
macSb.deleteCharAt(macSb.length()-1);
返回macSb.toString();
}
}捕获(例外情况除外){
例如printStackTrace();
}
返回“”;
}
您还期望什么?你是在真实设备上运行代码还是在模拟器上运行代码?代码没有问题。你在模拟器上得到这个02:00:00:00:00。
吗?我在真实设备上运行。