Android:获取MAC < 安卓系统11 <= 获取UUID
1.核心代码
主要的UseMac.java
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Environment;
import android.util.Log;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;
import java.util.UUID;public class UseMac {public static final String main(Context context) {//R对应安卓11 -->30if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//这里做你想做的事String uuid = "";try {uuid = readKey();} catch (IOException e) {e.printStackTrace();}return uuid;}else {return TVMac(context);}}private static String TVMac(Context context){int networkType;final ConnectivityManager connectivityManager= (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);@SuppressLint("MissingPermission") final NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();networkType=networkInfo.getType();Log.d("获取当前数据", "network type:"+networkType);if(networkType == ConnectivityManager.TYPE_WIFI){return getMac_wlan0();}else if((networkType == ConnectivityManager.TYPE_ETHERNET)){return getMac_eth0();}else{return getMac_wlan0();}}//====11-----Gpublic static String Android11Mac(Context context){// 使用WifiManager获取Mac地址WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo = null;if (wifiManager != null) {wifiInfo = wifiManager.getConnectionInfo();}// 获取Mac地址String macAddress = null;if (wifiInfo != null) {macAddress = wifiInfo.getMacAddress();Log.e("macAddress","====>>"+macAddress);}return macAddress;}public static String getUUID() {return UUID.randomUUID().toString().replaceAll("-", "");}private static String uuidfileName = "myuuid.txt";public static void saveBitmap() throws IOException {// 创建目录//获取内部存储状态String state = Environment.getExternalStorageState();//如果状态不是mounted,无法读写if (!state.equals(Environment.MEDIA_MOUNTED)) {return;}String sdCardDir = Environment.getExternalStorageDirectory().getAbsolutePath();File appDir = new File(sdCardDir, "CaChe");if (!appDir.exists()) {appDir.mkdir();}String fileName = uuidfileName;//这里是创建一个TXT文件保存我们的UUIDFile file = new File(appDir, fileName);if (!file.exists()) {file.createNewFile();}//保存android唯一表示符try {FileWriter fw = new FileWriter(file);fw.write(getUUID());fw.flush();fw.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static String readKey() throws IOException {// 创建目录//获取内部存储状态String state = Environment.getExternalStorageState();//如果状态不是mounted,无法读写if (!state.equals(Environment.MEDIA_MOUNTED)) {return null;}String sdCardDir = Environment.getExternalStorageDirectory().getAbsolutePath();File appDir = new File(sdCardDir, "CaChe");if (!appDir.exists()) {appDir.mkdir();}String fileName = uuidfileName;//这里是进行读取我们保存文件的名称File file = new File(appDir, fileName);if (!file.exists()) {file.createNewFile();}BufferedReader reader = null;StringBuilder content=null;try {FileReader fr = new FileReader(file);content= new StringBuilder();reader = new BufferedReader(fr);String line;while ((line= reader.readLine())!=null){content.append(line);}} catch (Exception e) {e.printStackTrace();}finally {if (reader!=null){try {reader.close();}catch (IOException e){e.printStackTrace();}}}return content.toString();}public static final String getNetName(Context context) {int networkType;final ConnectivityManager connectivityManager= (ConnectivityManager)context.getSystemService(context.CONNECTIVITY_SERVICE);@SuppressLint("MissingPermission") final NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();networkType=networkInfo.getType();Log.d("获取当前数据", "network type:"+networkType);if(networkType == ConnectivityManager.TYPE_WIFI){return "WIFI";}else if((networkType == ConnectivityManager.TYPE_ETHERNET)){return "有线";}else{return "WIFI";}}//获取无线mac地址public static final String getMac_wlan0() {try {List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());for (NetworkInterface nif : all) {if (!"wlan0".equalsIgnoreCase(nif.getName())) {continue;}byte[] macBytes = nif.getHardwareAddress();if (macBytes == null || macBytes.length == 0) {continue;}StringBuilder result = new StringBuilder();for (byte b : macBytes) {result.append(String.format("%02X", b));}String s1 = result.toString().toUpperCase().replaceAll ("(.{2})", "$1:");//加入:return s1.substring(0,s1.length()-1);}} catch (Exception x) {x.printStackTrace();}return "";}//获取有线mac地址public static String getMac_eth0() {try {List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());for (NetworkInterface nif : all) {if (!"eth0".equalsIgnoreCase(nif.getName())) {continue;}byte[] macBytes = nif.getHardwareAddress();if (macBytes == null || macBytes.length == 0) {continue;}StringBuilder result = new StringBuilder();for (byte b : macBytes) {result.append(String.format("%02X", b));}String s1 = result.toString().toUpperCase().replaceAll ("(.{2})", "$1:");//加入:return s1.substring(0,s1.length()-1);}} catch (Exception x) {x.printStackTrace();}return "";}}
下面说一下使用
2.获取mac
2.1.修改
主要是在 下面这个方法注释掉的是获取mac的,适合安卓11以下
public static final String main(Context context) {return TVMac(context);}
2.2.使用
把main方法的uuid部分注释掉
UseMac.main(activity)
3.获取uuid
这边有一个类,会主动给你申请权限
import android.app.Activity;
import android.content.pm.PackageManager;
import android.util.Log;import androidx.core.app.ActivityCompat;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;public class FileOper {private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"};private Activity activity;public FileOper(Activity activity) {this.activity =activity;try {//检测是否有写的权限int permission = ActivityCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE");if (permission != PackageManager.PERMISSION_GRANTED) {// 没有写的权限,去申请写的权限,会弹出对话框ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);}} catch (Exception e) {e.printStackTrace();}}//flie:要删除的文件夹的所在位置public void deleteFile(File file) {Log.e("TestFile","清除一下视频缓存");if (file.isDirectory()) {File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {File f = files[i];deleteFile(f);}// file.delete();//如要保留文件夹,只删除文件,请注释这行} else if (file.exists()) {file.delete();}}public void writeData(String url, String name, String content) {String filePath = url;String fileName = name + ".txt";writeTxtToFile(content, filePath, fileName);}// 将字符串写入到文本文件中private void writeTxtToFile(String strcontent, String filePath, String fileName) {//生成文件夹之后,再生成文件,不然会出错makeFilePath(filePath, fileName);String strFilePath = filePath + fileName;// 每次写入时,都换行写String strContent = strcontent + "\r\n";try {File file = new File(strFilePath);if (!file.exists()) {Log.d("TestFile", "Create the file:" + strFilePath);file.getParentFile().mkdirs();file.createNewFile();}RandomAccessFile raf = new RandomAccessFile(file, "rwd");raf.seek(file.length());raf.write(strContent.getBytes());raf.close();} catch (Exception e) {Log.e("TestFile", "Error on write File:" + e);}}//生成文件private File makeFilePath(String filePath, String fileName) {File file = null;makeRootDirectory(filePath);try {file = new File(filePath + fileName);if (!file.exists()) {file.createNewFile();}} catch (Exception e) {e.printStackTrace();}return file;}//判断文件是否存在public boolean fileIsExists(String strFile) {try {File f = new File(strFile);if (!f.exists()) {return false;}} catch (Exception e) {return false;}return true;}//生成文件夹public void makeRootDirectory(String filePath) {File file = null;try {file = new File(filePath);//不存在就新建if (!file.exists()) {file.mkdir();}} catch (Exception e) {Log.i("error:", e + "");}}//删除指定路径的文件public boolean deleteSingleFile(String filePath$Name) {File file = new File(filePath$Name);// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除if (file.exists() && file.isFile()) {if (file.delete()) {Log.e("--Method--", "删除文件" + filePath$Name + "成功!");return true;} else {Log.e("--Method--", "删除文件" + filePath$Name + "失败!");return false;}} else {Log.e("--Method--", "文件" + filePath$Name + "不存在!");return true;}}/*** 读取本地文件*/public String readRate(String path) {StringBuilder stringBuilder = new StringBuilder();File file = new File(path);if (!file.exists()) {return "";}if (file.isDirectory()) {Log.e("TestFile", "The File doesn't not exist.");return "";} else {try {InputStream instream = new FileInputStream(file);if (instream != null) {InputStreamReader inputreader = new InputStreamReader(instream);BufferedReader buffreader = new BufferedReader(inputreader);String line;while ((line = buffreader.readLine()) != null) {stringBuilder.append(line);}instream.close();}} catch (java.io.FileNotFoundException e) {Log.e("TestFile", "The File doesn't not exist.");return "";} catch (IOException e) {Log.e("TestFile", e.getMessage());return "";}}return stringBuilder.toString();//对读到的设备ID解密}
}
//读取uuidfileOper = new FileOper(this);try {if(fileOper.fileIsExists(Environment.getExternalStorageDirectory().getAbsolutePath()+uuidfileName)){UseMac.saveBitmap();}}catch(Exception e){System.out.println("base64Code:::"+e.toString());//出现异常的处理}
3.1.修改
public static final String main(Context context) {//return TVMac(context);String uuid = "";try {uuid = readKey();} catch (IOException e) {e.printStackTrace();}return uuid;}
相关文章:
Android:获取MAC < 安卓系统11 <= 获取UUID
1.核心代码 主要的UseMac.java import android.annotation.SuppressLint; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import an…...
线程的几种状态
目标: 1. 线程的几种状态的含义 2. 状态之间的切换条件 目录 新建(new)线程 可运行(Runnable)状态 运行(Running)状态 阻塞(Blocked)状态 等待(Waiting…...
kubernetes集群yaml文件与kubectl工具
k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(yaml)文件来解决,也就是可以把需要对资源对象操作编辑到yaml格式文件中,我们把文件叫做资源清单文件,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署…...
python基础语法(三)
感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 🥸🥸🥸C语言 🐿️🐿️🐿️C语言例题 🐣🐓🏀python 运…...
Haproxy集群与常见的Web集群调度器
文章目录 1. Web集群调度器概述1.1 Web集群调度器简介1.2 调度器类别1.2.1 常用软件类1.2.2 常用硬件类 2. Haproxy软件介绍2.1 Haproxy简介2.2 支持功能2.3 主要特性2.4 常用调度算法2.4.1 轮询:RR(Round Robin)2.4.2 最小连接数:…...
centos免密登录
centos免密登录 小白教程,一看就会,一做就成。 1.知道服务器密码的情况 ssh-keygen -t rsa #上面的命令后三次回车#然后把想要免密登录的服务器加进来 ssh-copy-id -i /root/.ssh/id_rsa.pub root192.168.10.115 #免密码登录被控的主机(ip是…...
学Python的漫画漫步进阶 -- 第十四步
学Python的漫画漫步进阶 -- 第十四步 十四、网络通信14.1 基本的网络知识14.1.1 TCP/IP14.1.2 IP地址14.1.3 端口14.1.4 HTTP/HTTPS 14.2 搭建自己的Web服务器14.3 urllib.request模块14.3.1 发送GET请求14.3.2 发送POST请求 14.4 JSON数据14.4.1 JSON文档的结构14.4.2 JSON数据…...
OpenCV(四十二):Harris角点检测
1.Harris角点介绍 什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。 Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之…...
C++数据结构题:DS 顺序表--连续操作
建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为 1000 ) 该类具有以下成员函数: 构造函数:实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数,实…...
DM@命题公式@主范式的性质和应用@数理逻辑解决数字电路全加器问题
文章目录 abstract主合取范式与主析取范式间的关系👺主范式存在及唯一性定理例 主范式的性质👺求公式的成真与成假赋值主析取范式直接得到主合取范式 判断公式的类型 n n n元命题公式的主析取范式(主合取范式)的个数判断两个命题公式是否等值 给出一个满…...
基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
Xilinx FPGA 7系列 GTX/GTH Transceivers (2)--IBERT
IBERT GTX IBERT核心提供了基础广泛的物理介质附件(PMA)评估7系列FPGA GTX收发器的演示平台。可参数化以使用不同GTX收发器和时钟拓扑,IBERT核心也可以定制使用不同的线速率、参考时钟速率和逻辑宽度。数据模式生成器和每个所需的GTX收发器都包含了检查程序,给出了几个不同…...
Python 文件介绍和正则表达式
文章目录 Python 文件和正则表达式文件打开文件读取文件直接读取 read():逐行读取采用 **for** 循环:采用 readlines(): 正则表达式匹配规则re 模块match 方法:search 方法group 方法split 方法编译:compile 方法 Pyth…...
ueditor百度富文本编辑器粘贴后html丢失class和style样式
问题 项目经理从123在线编辑上排版好的文章,粘贴到项目的编辑器上,样式完全乱了, 排版是这样的: 复制到ueditor后的格式: 这天差地别呀,于是打开代码模式,发现section的属性全没了 但是,sp…...
人脸自动贴国旗
(一)简介 国庆快到了,每年这个时候,大家的头像都会贴上国旗水印,然后我就像这刚好可以用opencv dilb实现一个简单的自动将国旗贴在人脸上,刚好配合gradio写一个简单的demo gradio官方文档 (…...
异步FIFO设计
1 FIFO简介 FIFO的本质是RAM,具有先进先出的特性。 FIFO的基本使用原则:空时不能读,满时不能写 FIFO的两个重要参数:宽度和深度 FIFO的两种类型: 同步FIFO:读写时钟相同,通常用来做数据缓存…...
学习python和anaconda的经验
PYTHON 1 常用命令 1.1 1.1 注释 Python注释多行的方法有以下三种:使用ctrl+/实现多行注释、在每一行的开头使用shift+#键、输入’‘’ ‘’或者"“” “”",将要注释的代码插在中间 1.2 def init( ):函数 区分两个函数: 1.def init(self): 这种形式在__init_…...
【Linux】多线程【上】
文章目录 前言1、Linux线程概念1-1、什么是线程?1-1-1、如何看待页表1-1-2、回顾进程地址空间1-1-3、页表怎么进行虚拟地址到物理地址的映射的?1-1-4、Linux中线程的概念(重点)1-1-5、原生线程库1-1-6、代码测试1-1-7、知识点&…...
生成式人工智能在高等教育 IT 中的作用
作者:Jared Pane 通过将你大学的数据与公共 LLMs 和 Elasticsearch 安全集成来找到你需要的答案。 根据 2023 年 4 月 EDUCAUSE 的一项调查,83% 的受访者表示,生成式人工智能将在未来三到五年内深刻改变高等教育。 学术界很快就询问和想象生…...
黑龙江省DCMM认证、CSMM认证、CMMM认证、知识产权等政策奖励
2023年8月28日 为深入落实党的二十大精神,认真落实省第十三次党代会关于创新龙江建设的部署要求,全面贯彻新发展理念,融入和服务构建新发展格局,实施创新驱动发展战略,着力建设创新龙江,不断塑造振兴发展新…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...
Heygem50系显卡合成的视频声音杂音模糊解决方案
如果你在使用50系显卡有杂音的情况,可能还是官方适配问题,可以使用以下方案进行解决: 方案一:剪映替换音色(简单适合普通玩家) 使用剪映换音色即可,口型还是对上的,没有剪映vip的&…...
【动态规划】B4336 [中山市赛 2023] 永别|普及+
B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦,梦里有一个字符串,这个字符串无论正着读还是倒着读都是一样的,例如: a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么,只记得…...
