android设备唯一码的获取之二

Android是如何使用selinux来保护系统属性的 Android是如何使用selinux来保护系统属性的尝试获取Android设备的序列号SerialNo1 Build.SERIAL新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 尝试获取Android设备的序列号Seri 阅读详情

此篇文章对比android设备唯一码的获取之一看比较好,地址

http://blog.youkuaiyun.com/fastthinking/article/details/18001967


如何确定一个android设备?

问题:wifi mac,手机号,sdkversion等这些都可能因为用户刷ROM后改变。不靠谱的说,很多山寨Android pad 的IMEI也是无法获取的!
一般建议先拿IMEI号来唯一确定一个设备的身份,确实如上所说,有些设备没有电话相关功能的话是拿不到IMEI的,比如很多低价国产Android平板,但是只要是Android设备,不管是没有电话功能的平板,还是没有电话功能的MP4,比如Galaxy PLAYER,他们都是有WIFI功能的,所以可以通过mac地址来唯一确定一台设备。那些做第3方统计分析的平台,比如友盟,也是采用先拿IMEI,后拿MAC地址来确定设备。我觉得这是一个比较合理的方法,还有的通过执行一些linux命令去拿CPU序列号的,由于每个设备厂商实现各不同,有时候也是拿不到的。所以一般的话我认为就通过IMEI和MAC地址来唯一标识一台设备是比较合理的。

(经实践确认,此方法也不靠谱.1.测试过有的设备在启动平板时飞行模式打开,deviceId获取不到。飞行模式关闭时能获取到。有的设备deviceId一直获取不到。2.经测试,某些定制平板在wifi开关关闭的时候确实返回不了mac地址)

TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = tm.getDeviceId();
if(deviceid == null || deviceid.length==0){
  WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  if (manager != null) {
   deviceid = manager.getConnectionInfo().getMacAddress();
  }
}

Android 中的几中方法,使用中常常不可靠
1. DEVICE_ID
假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码.
缺点:在少数的一些设备上,该实现有漏洞,会返回垃圾数据
 2. MAC ADDRESS

我们也可以通过Wifi获取MAC ADDRESS作为DEVICE ID

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
		if (manager != null) {
			String MacAddress = manager.getConnectionInfo().getMacAddress();
			Log.i(tag, "MacAddress is " + MacAddress);
		}

如果Wifi关闭的时候,硬件设备可能不能返回MAC ADDRESS。经测试,某些定制平板在wifi开关关闭的时候确实返回不了mac地址。另外使用一个无电话功能的台电a10四核pad和小米1s联通版。


3. Serial Number

A hardware serial number, if available. Alphanumeric only, case-insensitive.  

android.os.Build.SERIAL 直接读取

缺点:在少数的一些设备上,会返回垃圾数据


4. ANDROID_ID
ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,
缺点:当设备被wipe后该数改变, 不适用。

5.android 底层是 Linux,我们用Linux的方法来获取:
1 cpu号:
文件在: /proc/cpuinfo
通过Adb shell 查看:
adb shell cat /proc/cpuinfo


2 mac 地址
文件路径 /sys/class/net/wlan0/address
adb shell  cat /sys/class/net/wlan0/address                              
xx:xx:xx:xx:xx:aa

如果Wifi关闭的时候,硬件设备不能返回MAC ADDRESS.测试使用一个无电话功能的台电a10四核pad和小米1s联通版

在wifi打开的时候获取的mac地址同方法2地址相同。
获取MAC 地址代码

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager tm = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
String simSerialNumber = tm.getSimSerialNumber();
Log.i(tag, "simSerialNumber is " + simSerialNumber);
String deviceid = tm.getDeviceId();
Log.i(tag, "DeviceId is " + deviceid);
String SubscriberId = tm.getSubscriberId();
Log.i(tag, "SubscriberId is " + SubscriberId);
String Line1Number = tm.getLine1Number();
Log.i(tag, "Line1Number is " + Line1Number);
String ANDROID_ID = Secure.getString(getContentResolver(),
Secure.ANDROID_ID);
Log.i(tag, "ANDROID_ID is " + ANDROID_ID);
Log.i(tag, "android.os.Build.SERIAL is " + android.os.Build.SERIAL);
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (manager != null) {
String MacAddress = manager.getConnectionInfo().getMacAddress();
Log.i(tag, "MacAddress is " + MacAddress);
}
Log.i(tag, "macSerial getted  by linux is " + getMac());


}


private String getMac() {
String macSerial = null;
String str = "";
Process pp = null;
try {
<span style="white-space:pre">			</span>pp = Runtime.getRuntime().exec(
<span style="white-space:pre">					</span>"cat /sys/class/net/wlan0/address ");
<span style="white-space:pre">			</span>InputStreamReader ir = new InputStreamReader(pp.getInputStream());
<span style="white-space:pre">			</span>LineNumberReader input = new LineNumberReader(ir);


<span style="white-space:pre">			</span>for (; null != str;) {
<span style="white-space:pre">				</span>str = input.readLine();
<span style="white-space:pre">				</span>if (str != null) {
<span style="white-space:pre">					</span>macSerial = str.trim();// 去空格
<span style="white-space:pre">					</span>break;
<span style="white-space:pre">				</span>}
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>} catch (IOException ex) {
<span style="white-space:pre">			</span>// 赋予默认值
<span style="white-space:pre">			</span>ex.printStackTrace();
<span style="white-space:pre">		</span>}finally {
<span style="white-space:pre">			</span>if(pp!=null){
<span style="white-space:pre">				</span>pp.destroy();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>return macSerial;
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
台电a10 4核平板 打开wifi

07-29 14:43:06.880: I/MainActivity(21404): DeviceId is 3588170056-------
07-29 14:43:06.880: I/MainActivity(21404): SubscriberId is 
07-29 14:43:06.880: I/MainActivity(21404): Line1Number is 
07-29 14:43:06.880: I/MainActivity(21404): ANDROID_ID is c76ec70cf84-------
07-29 14:43:06.880: I/MainActivity(21404): android.os.Build.SERIAL is unknown
07-29 14:43:06.890: I/MainActivity(21404): MacAddress is 00:7d:0e:0-------
07-29 14:43:06.920: I/MainActivity(21404): macSerial getted  by linux is 00:7d:0e:03:c6:e6

台电a10 4核平板 关闭wifi

07-29 14:45:25.340: I/MainActivity(21404): macSerial getted  by linux is null


小米1s 打开wifi

07-29 14:46:35.934: I/MainActivity(10172): simSerialNumber is 898601128---------
07-29 14:46:35.934: I/MainActivity(10172): DeviceId is 8630920---------
07-29 14:46:35.934: I/MainActivity(10172): SubscriberId is 4600191---------
07-29 14:46:35.944: I/MainActivity(10172): Line1Number is +86156---------
07-29 14:46:35.944: I/MainActivity(10172): ANDROID_ID is fa7ae33b---------
07-29 14:46:35.944: I/MainActivity(10172): android.os.Build.SERIAL is 341---------
07-29 14:46:35.954: I/MainActivity(10172): MacAddress is d4:97:0b---------
07-29 14:43:06.920: I/MainActivity(21404): macSerial getted  by linux is 00:7d:0-------

小米1s 关闭wifi

07-29 14:46:35.994: I/MainActivity(10172): macSerial getted  by linux is null

Android实现获取SERIAL信息的方法 本文实例讲述了Android实现获取SERIAL信息的方法。分享给大家供大家参考。具体如下: android.os.build.serial 在API 9 中引入,如果低于9的系统可以通过这个方法获取这个信息值 java代码如下: public static String getDeviceSerial() { String serial = unknown; try { Class clazz = Class.forName(android.os.Build); Class paraTypes = Class.forName(java.lang.String 立即下载

相关推荐

Unity3d实现的十字路口的模拟(一)

最近学习了Unity3d这个游戏引擎,感觉真的是非常的强大,正好赶上操作系统课程要做一个模拟信号量的模拟程序,于是打算做一个模拟十字路口的程序,大致的实现要实现的成果是:存在四种不同的汽车,包括一辆警车(不受交通信号灯的控制)随机产生在不同的路口,并且有不同的行动路线如:直走,左转,右转等,当然还有交通信号灯来控制车辆的有序运行。可以展示不同的视角来观察路口的情况(利用Q,W,E,R分别控制不同的

永远在身边的专栏 7489

android 获取设备唯一值

1:获取CPU的编码值–这个肯定是绝对唯一的 2:如果取不到CPU的编码就取以太网的MAC地址,不要取WIFI的地址 3:如果取不到MAC地址的话,就取设备的序列号,序列号还是取不到 的话,那就只能去硬件编码了, 1 先从Shared里面取,效率比较高,以后每次娶到了直接保存在Shared里面,然后依次取CPU MAC 序列号,设备号 /*** * 获取设备的唯一编码 * 0:先取保存...

xieyaofeng的博客 1563

Python+ArcGIS实战:5步搞定土壤类型预测(附随机森林模型配置技巧)

本文详细介绍了如何结合Python与ArcGIS,利用随机森林模型进行土壤类型预测。通过5个核心步骤——数据预处理、样本创建、模型构建、空间预测与精度验证,构建了一套自动化、高精度的空间预测工作流,并提供了关键的模型配置与调参技巧,助力GIS开发者高效完成土壤制图任务。

weixin_29227585的博客 395

【Android系统更新--- Android10-getDeviceId返回null---DeviceId---AndroidID】

用意 保护用户隐私 限制第三方APP 访问到超出 APP使用期间的数据(device id、meid等) 导致10之后DeviceID不可用,推荐使用AndroidID Android 10系统 针对un-resetable 数据读取,新增限制。 影响的方法 Build getSerial() TelephonyManager getImei() getDeviceId() getM...

zhjali123的专栏 6940

ScanNet数据集下载全攻略:从申请到解析的保姆级教程(含常见问题解决)

本文提供了ScanNet数据集从申请授权到下载、解析的完整实战指南。针对这个大规模室内RGB-D数据集,详细介绍了官方申请流程、优化下载策略、数据验证方法,并重点解决了深度图解析等常见问题,帮助三维视觉研究者高效获取和使用这一宝贵资源。

5f4d3s2a1q的博客 617

不只是驱动:拆解AIC8800 WiFi模组在RK Android系统的完整启动链(从DTS到HAL)

本文深入解析了AIC8800 WiFi模组在RK Android系统中的完整启动链,从设备树(DTS)配置到HAL层适配,涵盖驱动移植、固件加载及用户空间服务协同等关键环节。通过详细的技术分析和调试技巧,帮助开发者解决RK平台与AIC8800模组的兼容性问题,优化WiFi子系统性能。

weixin_30439067的博客 492

TelephonyManager.getDeviceId()返回null 解决办法

TelephonyManager.getDeviceId()返回null 解决办法 在android开发发现TelephonyManager.getDeviceId()在权限允许的情况下取得返回值也为null,解决方法如下: public static String getDeviceId(Context context) { String mDeviceId; TelephonyManager mTelephony = (TelephonyManager) context.get

白高林的专栏 3499

FMCW雷达基本原理(通俗易懂)篇2

FMCW雷达(Frequency Modulated Continuous Wave Radar)是一种使用频率调制连续波的雷达系统。它使用一个发射器发射一个连续波,但是这个连续波的频率会在一定的范围内不断变化。当这个连续波遇到一个目标物体并被反射回来时,接收器会检测到这个反射波的频率变化,并计算出目标物体的距离和速度等信息。FMCW雷达的原理可以理解为:1.发射器发射一个连续波,这个波的频率会从一个固定的起始频率开始,逐渐变化至一个固定的终止频率。

研二小学鸡的博客 7687

Android安卓平板设备获取唯一标识

测试机器: android平板 型号:aosonR103。Android版本:6.0 一开始使用的androidId,但是如果平板恢复出厂设置后,这个androidId就会发生变化,所以使用androidId并不能保证是唯一标识。但是发现设备的序列号,却可以在恢复出厂设置后,保持不变。以下便为获取序列号的方法: try { Class&lt;?&gt; c =...

songzi1228的博客 6683

免安装版Notepad++终极配置:右键菜单+图标美化+多文件批量处理(2024新版)

本文详细介绍了如何为免安装版Notepad++进行终极配置,包括右键菜单添加、图标美化以及多文件批量处理功能。通过注册表编辑和高级定制,用户可以在便携版中实现与安装版相同的功能体验,同时保持系统整洁。特别适合开发者、系统管理员和效率追求者使用。

nut55的博客 830

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(二)校园网接入层交换机配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 1218

android 设备唯一码的获取,Cpu号,Mac地址

开发Android应用中,我们常常需要设备的唯一码来确定客户端。 Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码. 缺点:在少数的一些设备上

Ray的专栏 4802

【深度学习驱动流体力学】Python流体力学Ansys Fluent

PyFluent 是一个将 Python 编程语言与 Ansys Fluent 流体动力学 (CFD) 仿真软件集成的工具。它允许用户通过 Python 脚本来控制和自动化 Fluent 中的仿真任务,实现从预处理、求解到后处理的全流程控制。PyFluent 结合了 Python 的灵活性和 Fluent 的强大功能,提供了一种高效且灵活的 CFD 仿真方法。PyFluent 是一个强大而灵活的工具,使用户能够通过 Python 脚本全面利用 Ansys Fluent 的功能。

源代码杀手的博客 3123

获取android设备唯一编号_android 获取手机设备的唯一码(IMIE )

获取手机设备的唯一码(IMIE )public void fetch_status(){TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);//String str = "";str += "DeviceId(IMEI) = " + tm.getDeviceId() + ...

weixin_39717704的博客 179

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android设备唯一码的获取,cpu号,mac地址

抄自http://blog.youkuaiyun.com/hpccn/article/details/7872141   开发Android应用中,我们常常需要设备的唯一码来确定客户端。 Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 TelephonyM

javalfx的专栏 1944

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux获取设备唯一码,android 设备唯一码的获取,Cpu号,Mac地址

开发Android应用中,我们常常需要设备的唯一码来确定客户端。Android 中的几中方法,使用中常常不可靠1. DEVICE_ID假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码.缺点:在少数的一些设备上,该实现有漏洞,会返回垃圾数据2. MAC ...

weixin_33539912的博客 1076

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

再谈 android 设备SN的获取 续 android 设备唯一码的获取,Cpu号,Mac地址

之前发过一篇文章获取  http://blog.youkuaiyun.com/hpccn/article/details/7872141 android 设备唯一码的获取,Cpu号,Mac地址 这个方法使用中发现一些不完美的地方. -------------------------------------- 新的方法: 在使用命令行, adb device  ad

韩鹏程的专栏 2万+

android获取设备唯一码

android获取设备唯一码,最唯一的应该是IMEI号,全网唯一,但是有时候不一定可以获取到,这时候可以通过获取其他id来代替, 获取cpu串码,设备序列号、androidId,PesudoUniqueID(),mac地址,蓝牙mac地址,这几个ID里面获取只要获取到一个地址就可以使用,如果最后实在是上面的ID都没有获取到,那只能生产一个uuid,该ID表示同一时空下全世界唯一...

qq_35746390的博客 1168

android 获取手机设备的唯一码(IMIE ) 注册用

android 获取手机设备的唯一码(IMIE ) 获取手机设备的唯一码(IMIE ) public void fetch_status(){      TelephonyManager tm = (TelephonyManager) this      .getSystemService(Context.TELEPHONY_SERVICE);//          String st

Xiaowq的专栏 1935

android : 更新android 11 后 获取设备唯一码的方式

android 11 发布了 android 11 以前使用的MAC的设备唯一码的方式被废弃了,因为11不让用了,然后就去官方上找推荐了; 之前的获取MAC的地址,有兴趣的可以点进去看看 官方推荐使用UUID ;这个好像目前几个大厂的APP都在使用的方法 具体的就直接上代码吧; 下面的代码直接获取UUID public static String getUUID() { return UUID.randomUUID().toString().replaceAll("-", "");

weixin_43603192的博客 1万+

android 设备唯一码的获取

开发Android应用中,我们常常需要设备的唯一码来确定客户端。 Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。通过 TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码. 缺点:在少数的一些设备

huangrangg12的专栏 1060

Android获取设备唯一码

String uuid = ""; String serial = null; String m_szDevIDShort = "35" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_...

weixin_30721077的博客 448
上一篇: android之开发总结,常见问题,细节问题,用户体验
下一篇: jihigh自己总结
allenlee
博客等级 码龄18年 95粉丝 83原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值