android下获取设备唯一标识原本非常简单(至少不会像iOS一样禁用这个,禁用那个),但是由于设备的多样性需要考虑的东西也对应复杂起来。
先附上完整代码
protected static final String PREFS_FILE = "gank_device_id.xml";
protected static final String PREFS_DEVICE_ID = "gank_device_id";
protected static String uuid;
static public String getUDID()
{
if( uuid ==null ) {
synchronized (GankMainActivity.class) {
if( uuid == null) {
final SharedPreferences prefs = s_instance.getSharedPreferences( PREFS_FILE, 0);
final String id = prefs.getString(PREFS_DEVICE_ID, null );
if (id != null) {
// Use the ids previously computed and stored in the prefs file
uuid = id;
} else {
final String androidId = Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);
// Use the Android ID unless it's broken, in which case fallback on deviceId,
// unless it's not available, then fallback on a random number which we store
// to a prefs file
try {
if (!"9774d56d682e549c".equals(androidId)) {
uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")).toString();
} else {
final String deviceId = ((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();
uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString();
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
// Write the value out to the prefs file
prefs.edit().putString(PREFS_DEVICE_ID, uuid).commit();
}
}
}
}
return uuid;
}
1、正常情况下可以通过((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId(); 来获取,但是某些平板电脑此函数会返回空
2、通过Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID); 也可以获取到一个id,但是android2.2或者是某些山寨手机使用这个也是有问题的,它会返回一个固定的值9774d56d682e549c
3、如果前两个都没有获取到udid,那么就在程序启动的时候创建一个随机的uuid,然后保存起来。这个算是兼容方案,当然这样的设备并不会很多。
分享到:
相关推荐
iOS 设备唯一标示符(UDID)解决方案 ZKUDIDManager ,ZKUDIDManager是一个开源的基于Keychain和IDFV的iOS设备唯一标示符(UDID...
详细描述获取iphone手机获取device id即UDID的方法的文档
获取设备的各种标识符,一句代码搞定。 NSString *idfvStr = [DYDeviceInfo dy_getDeviceIDFV]; 跳转Git下载, Github地址:https://github.com/DanielYK/DYDeviceInfo.git
获取设备的udid,不用上架app store 也可以安装到手机上
UDID自主签名源码.zip admin CSS font images img includes install js plist static tcjs tj .DS_ Store 1receive.php 1udid.mobileconfig 404.html config.php cxreceive.php cxudid.mobileconfig gengxin.php ...
通过pc电脑,如何利用各种软件,获取iOS设备的UDID号
8种iOS获取设备唯一标识的方法,希望对大家有用。 UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID ...
获取iOS设备的UDID,方便测试,不用上传到app store也可以安装
如何在没有TestFlight App的情况下获取设备信息 UDID.io 使用示例 著名的使用移动配置获取 iPhone 和 iPad 的 UDID、IMEI、序列号等。 此存储库包含示例应用程序,它使用“第三方 API”将 UDID.io 用作您网站或移动...
通过这个小程序,可以获取到当前设备的UDID信息,用于广告等业务
苹果手机UDID的获取 苹果手机UDID的获取 苹果手机UDID的获取
本Demo内包含 Java端、PHP端,以及 iOS本地搭建服务器,安装 描述文件获取手机唯一UDID 以及回调的方法
NULL 博文链接:https://lanxs.iteye.com/blog/2175758
flutter_udid插件可在iOS和Android上重新安装的应用程序之间检索持久性UDID。 入门导入'package:flutter_udid / flutter_udid。 flutter_udid插件可在iOS和Android上重新安装的应用程序之间检索持久性UDID。 入门...
凡是接触过iOS的开发者都清楚每一台iOS设备都有一个唯一的识别号:UDID,这个40位的字符串是你的设备区别于其他任何一台设备的唯一标识。 这个字符串用处非常大,我们可以把它作为用户的唯一ID,跳过用户登陆这一步...
该方法属于UDID替代方案中最为准确的一种 因为网卡地址不会因为刷机 还原设备而发生改变 故追求唯一性的厂商多选择此种方案 在iOS7之后 应用已经无法获取网卡地址 该方案在iOS7中也已经被废弃 所以可用于iOS7以前的...
查询iPad/iPhone设备的UDID
UDID 解决方案 SecureUDID ,SecureUDID 是一个开源的基于沙箱机制的 UDID 解决方案,旨在解决苹果因为废弃了 UDI...
在iOS和Android上重新安装的应用程序之间检索永久性UDID的插件。 入门 import 'package:flutter_udid/flutter_udid.dart'; String udid = await FlutterUdid.udid; 这使用相应平台的格式为iOS和Android提供了UDID。 ...
udid.php