php获取安卓手机mac地址栏,获取android手机mac地址

android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下:

WifiManager wifiMan = (WifiManager)context.getSystemService(Context.WIFI_SERVICE) ;

WifiInfo wifiInf = wifiMan.getConnectionInfo();

return wifiInf.getMacAddress();

但是这种情况,获取到的mac地址都是:02:00:00:00:00:00,看来就需要另一种方法来获取mac地址:

private static final String marshmallowMacAddress = "02:00:00:00:00:00";

private static final String fileAddressMac = "/sys/class/net/wlan0/address";

public static String getAdresseMAC(Context context) {

WifiManager wifiMan = (WifiManager)context.getSystemService(Context.WIFI_SERVICE) ;

WifiInfo wifiInf = wifiMan.getConnectionInfo();

if(wifiInf !=null && marshmallowMacAddress.equals(wifiInf.getMacAddress())){

String result = null;

try {

result= getAdressMacByInterface();

if (result != null){

return result;

} else {

result = getAddressMacByFile(wifiMan);

return result;

}

} catch (IOException e) {

Log.e("MobileAccess", "Erreur lecture propriete Adresse MAC");

} catch (Exception e) {

Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC ");

}

} else{

if (wifiInf != null && wifiInf.getMacAddress() != null) {

return wifiInf.getMacAddress();

} else {

return "";

}

}

return marshmallowMacAddress;

}

接下来,来分析一下其中两个重要的方法

1.getAdressMacByInterface()

private static String getAdressMacByInterface(){

try {

List all = Collections.list(NetworkInterface.getNetworkInterfaces());

for (NetworkInterface nif : all) {

if (nif.getName().equalsIgnoreCase("wlan0")) {

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 e) {

Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC ");

}

return null;

}

2.getAddressMacByFile(wifiMan)

private static String getAddressMacByFile(WifiManager wifiMan) throws Exception {

String ret;

int wifiState = wifiMan.getWifiState();

wifiMan.setWifiEnabled(true);

File fl = new File(fileAddressMac);

FileInputStream fin = new FileInputStream(fl);

ret = crunchifyGetStringFromStream(fin);

fin.close();

boolean enabled = WifiManager.WIFI_STATE_ENABLED == wifiState;

wifiMan.setWifiEnabled(enabled);

return ret;

}

private static String crunchifyGetStringFromStream(InputStream crunchifyStream) throws IOException {

if (crunchifyStream != null) {

Writer crunchifyWriter = new StringWriter();

char[] crunchifyBuffer = new char[2048];

try {

Reader crunchifyReader = new BufferedReader(new InputStreamReader(crunchifyStream, "UTF-8"));

int counter;

while ((counter = crunchifyReader.read(crunchifyBuffer)) != -1) {

crunchifyWriter.write(crunchifyBuffer, 0, counter);

}

} finally {

crunchifyStream.close();

}

return crunchifyWriter.toString();

} else {

return "No Contents";

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值