当前位置: 首页 > news >正文

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…...

线程的几种状态

目标&#xff1a; 1. 线程的几种状态的含义 2. 状态之间的切换条件 目录 新建&#xff08;new&#xff09;线程 可运行&#xff08;Runnable&#xff09;状态 运行&#xff08;Running&#xff09;状态 阻塞&#xff08;Blocked&#xff09;状态 等待&#xff08;Waiting…...

kubernetes集群yaml文件与kubectl工具

k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(yaml)文件来解决&#xff0c;也就是可以把需要对资源对象操作编辑到yaml格式文件中&#xff0c;我们把文件叫做资源清单文件&#xff0c;通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署…...

python基础语法(三)

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个人主页 &#x1f978;&#x1f978;&#x1f978;C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;️C语言例题 &#x1f423;&#x1f413;&#x1f3c0;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 轮询&#xff1a;RR&#xff08;Round Robin&#xff09;2.4.2 最小连接数&#xff1a…...

centos免密登录

centos免密登录 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.知道服务器密码的情况 ssh-keygen -t rsa #上面的命令后三次回车#然后把想要免密登录的服务器加进来 ssh-copy-id -i /root/.ssh/id_rsa.pub root192.168.10.115 #免密码登录被控的主机&#xff08;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角点介绍 什么是角点&#xff1f; 角点指的是两条边的交点&#xff0c;图中红色圈起来的点就是角点。 Harris角点检测原理&#xff1a;首先定义一个矩形区域&#xff0c;然后将这个矩形区域放置在我的图像中&#xff0c;求取这个区域内所有的像素值之和&#xff0c;之…...

C++数据结构题:DS 顺序表--连续操作

建立顺序表的类&#xff0c;属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为 1000 &#xff09; 该类具有以下成员函数&#xff1a; 构造函数&#xff1a;实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数&#xff0c;实…...

DM@命题公式@主范式的性质和应用@数理逻辑解决数字电路全加器问题

文章目录 abstract主合取范式与主析取范式间的关系&#x1f47a;主范式存在及唯一性定理例 主范式的性质&#x1f47a;求公式的成真与成假赋值主析取范式直接得到主合取范式 判断公式的类型 n n n元命题公式的主析取范式(主合取范式)的个数判断两个命题公式是否等值 给出一个满…...

基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

Xilinx FPGA 7系列 GTX/GTH Transceivers (2)--IBERT

IBERT GTX IBERT核心提供了基础广泛的物理介质附件(PMA)评估7系列FPGA GTX收发器的演示平台。可参数化以使用不同GTX收发器和时钟拓扑,IBERT核心也可以定制使用不同的线速率、参考时钟速率和逻辑宽度。数据模式生成器和每个所需的GTX收发器都包含了检查程序,给出了几个不同…...

Python 文件介绍和正则表达式

文章目录 Python 文件和正则表达式文件打开文件读取文件直接读取 read()&#xff1a;逐行读取采用 **for** 循环&#xff1a;采用 readlines()&#xff1a; 正则表达式匹配规则re 模块match 方法&#xff1a;search 方法group 方法split 方法编译&#xff1a;compile 方法 Pyth…...

ueditor百度富文本编辑器粘贴后html丢失class和style样式

问题 项目经理从123在线编辑上排版好的文章&#xff0c;粘贴到项目的编辑器上&#xff0c;样式完全乱了, 排版是这样的&#xff1a; 复制到ueditor后的格式&#xff1a; 这天差地别呀&#xff0c;于是打开代码模式&#xff0c;发现section的属性全没了 但是&#xff0c;sp…...

人脸自动贴国旗

&#xff08;一&#xff09;简介 国庆快到了&#xff0c;每年这个时候&#xff0c;大家的头像都会贴上国旗水印&#xff0c;然后我就像这刚好可以用opencv dilb实现一个简单的自动将国旗贴在人脸上&#xff0c;刚好配合gradio写一个简单的demo gradio官方文档 &#xff08;…...

异步FIFO设计

1 FIFO简介 FIFO的本质是RAM&#xff0c;具有先进先出的特性。 FIFO的基本使用原则&#xff1a;空时不能读&#xff0c;满时不能写 FIFO的两个重要参数&#xff1a;宽度和深度 FIFO的两种类型&#xff1a; 同步FIFO&#xff1a;读写时钟相同&#xff0c;通常用来做数据缓存…...

学习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、什么是线程&#xff1f;1-1-1、如何看待页表1-1-2、回顾进程地址空间1-1-3、页表怎么进行虚拟地址到物理地址的映射的&#xff1f;1-1-4、Linux中线程的概念&#xff08;重点&#xff09;1-1-5、原生线程库1-1-6、代码测试1-1-7、知识点&…...

生成式人工智能在高等教育 IT 中的作用

作者&#xff1a;Jared Pane 通过将你大学的数据与公共 LLMs 和 Elasticsearch 安全集成来找到你需要的答案。 根据 2023 年 4 月 EDUCAUSE 的一项调查&#xff0c;83% 的受访者表示&#xff0c;生成式人工智能将在未来三到五年内深刻改变高等教育。 学术界很快就询问和想象生…...

黑龙江省DCMM认证、CSMM认证、CMMM认证、知识产权等政策奖励

2023年8月28日 为深入落实党的二十大精神&#xff0c;认真落实省第十三次党代会关于创新龙江建设的部署要求&#xff0c;全面贯彻新发展理念&#xff0c;融入和服务构建新发展格局&#xff0c;实施创新驱动发展战略&#xff0c;着力建设创新龙江&#xff0c;不断塑造振兴发展新…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...