当前位置: 首页 > 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;不断塑造振兴发展新…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...