**

Android获取当前WiFi的MAC地址

**

package com.dogness.platform.utils;

import android.content.Context;

import android.content.pm.PackageManager;

import android.net.wifi.WifiInfo;

import android.net.wifi.WifiManager;

import android.os.Build;

import android.text.TextUtils;

import android.util.Log;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.InputStreamReader;

import java.io.LineNumberReader;

import java.io.Reader;

import java.net.InetAddress;

import java.net.NetworkInterface;

import java.net.SocketException;

import java.util.Enumeration;

/**

* Android获取当前WiFi的MAC地址-适配所有版本

* Created by dcg on 2019/8/26.

*/

public class WifiMacUtils {

public static String getMac(Context mContext) {

String strMac = null;

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

AppLog.Loge( "6.0以下");

strMac = getLocalMacAddressFromWifiInfo(mContext.getApplicationContext());

return strMac;

} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N

&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

AppLog.Loge("6.0以上7.0以下");

strMac = getMacAddress(mContext.getApplicationContext());

return strMac;

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

AppLog.Loge("7.0以上");

if (!TextUtils.isEmpty(getMacAddress())) {

Log.e("=====", "7.0以上1");

strMac = getMacAddress();

return strMac;

} else if (!TextUtils.isEmpty(getMachineHardwareAddress())) {

AppLog.Loge( "7.0以上2");

strMac = getMachineHardwareAddress();

return strMac;

} else {

AppLog.Loge( "7.0以上3");

strMac = getLocalMacAddressFromBusybox();

return strMac;

}

}

return "02:00:00:00:00:00";

}

/**

* 根据wifi信息获取本地mac

* @param context

* @return

*/

public static String getLocalMacAddressFromWifiInfo(Context context){

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

WifiInfo winfo = wifi.getConnectionInfo();

String mac = winfo.getMacAddress();

return mac;

}

/**

* android 6.0及以上、7.0以下 获取mac地址

*

* @param context

* @return

*/

public static String getMacAddress(Context context) {

// 如果是6.0以下,直接通过wifimanager获取

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

String macAddress0 = getMacAddress0(context);

if (!TextUtils.isEmpty(macAddress0)) {

return macAddress0;

}

}

String str = "";

String macSerial = "";

try {

Process pp = Runtime.getRuntime().exec(

"cat /sys/class/net/wlan0/address");

InputStreamReader ir = new InputStreamReader(pp.getInputStream());

LineNumberReader input = new LineNumberReader(ir);

for (; null != str; ) {

str = input.readLine();

if (str != null) {

macSerial = str.trim();// 去空格

break;

}

}

} catch (Exception ex) {

Log.e("----->" + "NetInfoManager", "getMacAddress:" + ex.toString());

}

if (macSerial == null || "".equals(macSerial)) {

try {

return loadFileAsString("/sys/class/net/eth0/address")

.toUpperCase().substring(0, 17);

} catch (Exception e) {

e.printStackTrace();

Log.e("----->" + "NetInfoManager",

"getMacAddress:" + e.toString());

}

}

return macSerial;

}

private static String getMacAddress0(Context context) {

if (isAccessWifiStateAuthorized(context)) {

WifiManager wifiMgr = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = null;

try {

wifiInfo = wifiMgr.getConnectionInfo();

return wifiInfo.getMacAddress();

} catch (Exception e) {

Log.e("----->" + "NetInfoManager",

"getMacAddress0:" + e.toString());

}

}

return "";

}

/**

* Check whether accessing wifi state is permitted

*

* @param context

* @return

*/

private static boolean isAccessWifiStateAuthorized(Context context) {

if (PackageManager.PERMISSION_GRANTED == context

.checkCallingOrSelfPermission("android.permission.ACCESS_WIFI_STATE")) {

Log.e("----->" + "NetInfoManager", "isAccessWifiStateAuthorized:"

+ "access wifi state is enabled");

return true;

} else

return false;

}

private static String loadFileAsString(String fileName) throws Exception {

FileReader reader = new FileReader(fileName);

String text = loadReaderAsString(reader);

reader.close();

return text;

}

private static String loadReaderAsString(Reader reader) throws Exception {

StringBuilder builder = new StringBuilder();

char[] buffer = new char[4096];

int readLength = reader.read(buffer);

while (readLength >= 0) {

builder.append(buffer, 0, readLength);

readLength = reader.read(buffer);

}

return builder.toString();

}

/**

* 根据IP地址获取MAC地址

*

* @return

*/

public static String getMacAddress() {

String strMacAddr = null;

try {

// 获得IpD地址

InetAddress ip = getLocalInetAddress();

byte[] b = NetworkInterface.getByInetAddress(ip)

.getHardwareAddress();

StringBuffer buffer = new StringBuffer();

for (int i = 0; i < b.length; i++) {

if (i != 0) {

buffer.append(':');

}

String str = Integer.toHexString(b[i] & 0xFF);

buffer.append(str.length() == 1 ? 0 + str : str);

}

strMacAddr = buffer.toString().toUpperCase();

} catch (Exception e) {

}

return strMacAddr;

}

/**

* 获取移动设备本地IP

*

* @return

*/

private static InetAddress getLocalInetAddress() {

InetAddress ip = null;

try {

// 列举

Enumerationen_netInterface = NetworkInterface

.getNetworkInterfaces();

while (en_netInterface.hasMoreElements()) {// 是否还有元素

NetworkInterface ni = (NetworkInterface) en_netInterface

.nextElement();// 得到下一个元素

Enumerationen_ip = ni.getInetAddresses();// 得到一个ip地址的列举

while (en_ip.hasMoreElements()) {

ip = en_ip.nextElement();

if (!ip.isLoopbackAddress()

&& ip.getHostAddress().indexOf(":") == -1)

break;

else

ip = null;

}

if (ip != null) {

break;

}

}

} catch (SocketException e) {

e.printStackTrace();

}

return ip;

}

/**

* 获取本地IP

*

* @return

*/

private static String getLocalIpAddress() {

try {

for (Enumerationen = NetworkInterface

.getNetworkInterfaces(); en.hasMoreElements(); ) {

NetworkInterface intf = en.nextElement();

for (EnumerationenumIpAddr = intf

.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {

InetAddress inetAddress = enumIpAddr.nextElement();

if (!inetAddress.isLoopbackAddress()) {

return inetAddress.getHostAddress().toString();

}

}

}

} catch (SocketException ex) {

ex.printStackTrace();

}

return null;

}

/**

* android 7.0及以上 (2)扫描各个网络接口获取mac地址

*

*/

/**

* 获取设备HardwareAddress地址

*

* @return

*/

public static String getMachineHardwareAddress() {

Enumerationinterfaces = null;

try {

interfaces = NetworkInterface.getNetworkInterfaces();

} catch (SocketException e) {

e.printStackTrace();

}

String hardWareAddress = null;

NetworkInterface iF = null;

if (interfaces == null) {

return null;

}

while (interfaces.hasMoreElements()) {

iF = interfaces.nextElement();

try {

hardWareAddress = bytesToString(iF.getHardwareAddress());

if (hardWareAddress != null)

break;

} catch (SocketException e) {

e.printStackTrace();

}

}

return hardWareAddress;

}

/***

* byte转为String

*

* @param bytes

* @return

*/

private static String bytesToString(byte[] bytes) {

if (bytes == null || bytes.length == 0) {

return null;

}

StringBuilder buf = new StringBuilder();

for (byte b : bytes) {

buf.append(String.format("%02X:", b));

}

if (buf.length() > 0) {

buf.deleteCharAt(buf.length() - 1);

}

return buf.toString();

}

/**

* android 7.0及以上 (3)通过busybox获取本地存储的mac地址

*

*/

/**

* 根据busybox获取本地Mac

*

* @return

*/

public static String getLocalMacAddressFromBusybox() {

String result = "";

String Mac = "";

result = callCmd("busybox ifconfig", "HWaddr");

// 如果返回的result == null,则说明网络不可取

if (result == null) {

return "网络异常";

}

// 对该行数据进行解析

// 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67

if (result.length() > 0 && result.contains("HWaddr") == true) {

Mac = result.substring(result.indexOf("HWaddr") + 6,

result.length() - 1);

result = Mac;

}

return result;

}

private static String callCmd(String cmd, String filter) {

String result = "";

String line = "";

try {

Process proc = Runtime.getRuntime().exec(cmd);

InputStreamReader is = new InputStreamReader(proc.getInputStream());

BufferedReader br = new BufferedReader(is);

while ((line = br.readLine()) != null

&& line.contains(filter) == false) {

result += line;

}

result = line;

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

}

android获取wifi mac地址吗,Android获取当前WiFi的MAC地址-适配所有版本相关推荐

  1. android获取wifi mac地址吗,Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SER ...

  2. android动态mac地址,Android 版本兼容 — Android 6.0 和 7.0后获取Mac地址

    Android 6.0 和 7.0后获取Mac地址 随着Android的版本迭代,获取设备的Mac地址也发生了改变.这里找到了最新的适配方案(适配当前的最新版本Android 9.0),并且记录了整个 ...

  3. ios imei android,获取手机(ios,android)的设备唯一码(mac地址, IMEI)

    获取手机(ios,android)的设备唯一码(mac地址, IMEI) app中总会用到客户端下载量数据统计,一般都是用的设备的唯一码作为标示,以下是获取mac地址的代码片段,记录备份. andro ...

  4. Android的mac和BSSID,Android 获取本机的mac和wifi的BSSID(mac)以及其他信息

    一上班就开始总结上礼拜写的wifi,先来说说wifi的属性 在Android的官方文档中定义了如下五种状态: WIFI_STATE_DISABLED   WIFI 不可用 WIFI_STATE_DIS ...

  5. android 获取wifi的ip地址吗,Android获取有线和无线(wifi)的IP地址

    /*** 获取IP * *@paramcontext *@return */ public staticString getIP(Context context) { String ip= " ...

  6. android 获取wifi的ip地址吗,Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开 ...

  7. android蓝牙获取mac地址,如何获得蓝牙连接设备的MAC地址在android中

    我在android中通过蓝牙发送图像,并且想要获取图像发送到的设备的MAC地址.如何获得蓝牙连接设备的MAC地址在android中 请在下面找到我的代码. private void bluetooth ...

  8. Android开启热点后作为路由器,获取AP端IP地址

    最近在做类似面对面通信,需要一台手机作为AP端开启热点,另一台手机作为STA端连接热点,然后AP端告诉STA端它的IP地址,进行socket通信. 手机在联网时,就会被分配一个IP地址,它在开启热点时 ...

  9. android dhcp 服务器,安卓通过DHCP协议获取IP地址的过程

    安卓通过DHCP协议的DORA Discovery发现 Offer提供 Request请求 Ack确认 获取IP地址的过程 安卓N之前 5.0 6.0通过 android_net_utils_runD ...

最新文章

  1. navicat无法连接远程的数据库解决
  2. Content Provide详解
  3. 换npm yarn的源让install超时去死吧
  4. python函数每日一讲 - cmp(x,y)
  5. windows搜索工具_加快搞定并替代 Windows 10 搜索框搜索文件速度的免费小工具
  6. obj文件编辑软件_工程动画制作 | MAX文件导出obj、fbx格式在Bentley软件中应用
  7. CSS单位之战:EM与。 REMs ...打架! ?
  8. UI资源模板| 针对iOS系统设计的购物APP移动应用UI设计套件
  9. Java定时任务解决方案
  10. 我看Asp.Net控件(三)
  11. 【C语言】实现对一个8 bit数据(unsigned char类型)的指定位(例如第n位)的置0或者置1操作,并保持其他位不变。
  12. a人工智能b大数据c云计算_解读云计算、大数据、AI 对数据中心的影响,最全面的解说分析!...
  13. html表格的基础知识及源代码-尚硅谷
  14. Win10怎么去除桌面快捷方式图标左下角的小箭头
  15. 入侵检测工具AIDE极简教程
  16. 第三章:绘制统计图形
  17. 使用阿里云实现短信发送服务(测试版)
  18. 用Pandas秒秒钟搞定24张Excel报表,还做了波投放分析!
  19. luogu P2124 奶牛美容
  20. eWebEditor漏洞 [转]

热门文章

  1. 拖动布局之保存布局页面
  2. Java架构师成长之道之计算机组成原理组成篇
  3. 三,springboot集成mybatis
  4. 清北学堂模拟赛day7 错排问题
  5. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
  6. 解决安卓TextView高度和textSize大小不一致问题
  7. 一个小例子介绍Obj-C的函数命名方式
  8. Kraft 0.50 发布,小型文档管理程序
  9. 进程间能否传递指针?
  10. MyCat分布式数据库集群架构工作笔记0017---高可用_单表存储千万级_海量存储_垂直分库