Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)
在我们的APP开发中,通常需要获取到设备的唯一标识。在Android6.0之前,有很多方法我们可以方便获取到硬件的唯一标识,但是在Android6.0之后,Android系统大幅限制了我们获取设备的硬件信息。
Android6.0之前的方法(已过时)
DEVICE_ID
通getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()获取,但是6.0之后必须申请READ_PHONE_STATE,并且获取到的这个值在不同的厂商和设备中并不可靠。MAC地址
这个是无线网卡的MAC地址,这个需要ACCESS_WIFI_STATE权限,并且很多情况下并获取不到这个值,也并不是十分可靠。ANDROID_ID
这个值是当一个新的设备第一次启动时,或者恢复出厂设置时,系统会生成一个64位的数字,这个值目前(Android4.0之后)已经非常可靠,但是仍有个别厂商的定制系统的BUG,导致这个值返回null。
获取设备唯一标识的正确姿势
由于ANDROID_ID的值相对稳定和可靠,并且不需要申请权限,所以我们获取设备的唯一标识应该使用这个值,同时我们应该考虑到一些极端情况和安全问题。
- 获取ANDROID_ID
public static String getAndroidID() {
String id = Settings.Secure.getString(
Utils.getApp().getContentResolver(),
Settings.Secure.ANDROID_ID
);
return id == null ? "" : id;
}
- 构造UUID,防止直接暴露ANDROID_ID
private static String getDeviceUUid()
{
String androidId = DeviceUtils.getAndroidID();
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)androidId.hashCode() << 32));
return deviceUuid.toString();
}
- 考虑极端情况,我们自己生成一个应用级别的UUID
这种情况我们需要将生成的UUID保存到SharedPreference中,只要应用不被卸载或者清除数据,这个值就不会变。
private static String getAppUUid() {
String uuid = SPUtils.getInstance().getString(PREF_KEY_UUID);
if (TextUtils.isEmpty(uuid)) {
uuid = UUID.randomUUID().toString();
//这里需要保存到SharedPreference中
...
}
return uuid;
}
- 将上面的获取方法封装到一个方法中
public static String getUUID() {
String uuid = getDeviceUUid();
if (TextUtils.isEmpty(uuid)) {
uuid = getAppUUid();
}
return uuid;
}
总结
这些获取UUID方法非常简单,并且在应用的开发中可以满足99%的需求,不需要动态申请权限,也非常可靠,但是在使用时需要清楚其生成过程,以便应用到安全性要求非常高的场景中。
如有更多疑问,请参考我的其它Android相关博客:我的博客地址
Android开发 - 获取Android设备的唯一标识码(Android 6.0或更高)的更多相关文章
- 怎样获取ios设备的唯一标识
非常多地方都会须要用到唯一标志. 比方: 1. 我们相用一个设备的唯一标志当作用户id,特别是网络游戏,这样就能够省去注冊的麻烦. 2. 想把app相关的文件加密,密钥哪里来的?有些人可能会说hard ...
- DeviceUuidFactory【获取设备唯一标识码的UUID(加密)】【需要运行时权限的处理的配合】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于An ...
- 获取Android设备唯一标识码
概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...
- Android 获取设备唯一标识码
概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...
- Android 手机上获取物理唯一标识码[转]
所有添加有谷歌账户的设备可以返回一个 ANDROID_ID 所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添 ...
- Android 手机上获取物理唯一标识码
唯一标识码这东西在网络应用中非常有用,例如检测是否重复注册之类的. import android.provider.Settings.Secure;private String android_id ...
- iOS 获取设备的唯一标识
有时候,我们需要记录一下设备的唯一标识,比如标识这个设备是不是已经发过促销券了或者是否下载试用过app等等.最简单 的方法就是获取设备的UDID#[UIDevice currentDevice] un ...
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
android开发获取网络状态整理: package com.gzcivil.utils; import android.content.Context; import android.net.Con ...
- 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 zz
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
随机推荐
- ubuntu下使用fstab挂载硬盘时,属于root,如何把它改为属于一个用户的(如sgjm)
http://zhidao.baidu.com/link?url=xnakfVD16EtunTSt3wBm153DyqHnXN3FSPO1E_2SpVmM5bmEIwICLA0N6zN85_ioQ3f ...
- centos下利用yum安装LAMP(Linux+Apache+MySQL+PHP)及配置
先说下我的实践配置,centos6.5(64位),联网 安装前准备:关闭防火墙 service iptables stop 安装MySQL 打开终端,root用户 1 yum install mysq ...
- Linux关机操作
正确的关机流程为:sync > shutdown > reboot > halt 关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档. 例如你可以运行如 ...
- springboot 配置DRUID数据源
druid 是阿里开源的数据库连接池. 开发时整合 druid 数据源过程. 1.修改pom.xml <dependency> <groupId>mysql</gro ...
- Le Chapitre VII
Le cinquième jour, toujours grâce au mouton, ce secrèt de la vie du petit prince me fut révélé. Il m ...
- js正则 - 正则判断是否为数字与字母的混合
function istrue(str){ var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i; return reg.test(str); ...
- 批处理最完整人性化教程(.bat文件语法)
原文链接:http://www.cnitblog.com/seeyeah/archive/2009/01/15/53808.html 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字 ...
- BeautifulSoup学习心得(一)
[BeautifulSoup最简介] BeautifulSoup,是Python中的一个第三方库,用于帮助解析Html/XML等内容,便于实现后期的内容提取等方面的工作. BeautifulSoup官 ...
- MIT molecular Biology 笔记8 RNA剪接
视频 https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition J.D. Wat ...
- MIT Molecular Biology 笔记4 DNA相关实验
视频 https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...