手机设备的唯一标识符

标签: 手机 设备 唯一 | 发表时间:2014-12-26 22:20 | 作者:艳过留痕
出处:http://www.iteye.com

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。
Android中,有以下几种方法获取这样的ID。

1. The IMEI: 仅仅只对Android手机有效:

TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE

采用此种方法,需要在AndroidManifest.xml中加入一个许可: android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。

2. Pseudo-Unique ID, 这个在任何Android手机中都有效
有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:

String m_szDevIDShort = "35" + //we make this look like a valid IMEI 

Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits  

大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。

3. The Android ID  , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。

String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

Returns: 9774d56d682e549c . 无需任何许可。

4. The WLAN MAC Address string, 是另一个唯一ID。但是你需要为你的工程加入 android.permission.ACCESS_WIFI_STATE 权限,否则这个地址会为null。

WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();

Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。

5. The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入 android.permission.BLUETOOTH 权限.

BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter      
m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();      
String m_szBTMAC = m_BluetoothAdapter.getAddress();

Returns: 43:25:78:50:93:38 . 蓝牙没有必要打开,也能读取。

Combined Device ID
综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。
但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。

String m_szLongID = m_szImei + m_szDevIDShort 
+ m_szAndroidID+ m_szWLANMAC + m_szBTMAC;
// compute md5
MessageDigest m =null;
try{
 m =MessageDigest.getInstance("MD5");
 }catch(NoSuchAlgorithmException e){
 e.printStackTrace();
}
m.update(m_szLongID.getBytes(),0,m_szLongID.length());
// get md5 bytes
byte p_md5Data[]= m.digest();
// create a hex string
String m_szUniqueID =newString();
for(int i=0;i<p_md5Data.length;i++){
int b =(0xFF& p_md5Data[i]);
// if it is a single digit, make sure it have 0 in front (proper padding)
if(b <=0xF)
        m_szUniqueID+="0";
// add number to string
    m_szUniqueID+=Integer.toHexString(b);
}// hex string to uppercase
m_szUniqueID = m_szUniqueID.toUpperCase();

通过以上算法,可产生32位的16进制数据:
9DDDF85AFF0A87974CE4541BD94D5F55
现在你就可以对其进行你的应用了。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [手机 设备 唯一] 推荐:

手机设备的唯一标识符

- - 移动开发 - ITeye博客
有很多场景和需求你需要用到手机设备的唯一标识符. 在 Android中,有以下几种方法获取这样的ID. The IMEI: 仅仅只对Android手机有效:. 采用此种方法,需要在AndroidManifest.xml中加入一个许可: android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用.

苹果将在iOS 5中弃用唯一设备标识符

- xing - cnBeta.COM
据美国科技新闻网站TechCrunch报道,苹果对iOS 5 Beta 6的文档进行了更新,表示将逐步移除iOS设备的唯一设备标识符(unique device identifier),简称UDID. 许多应用和移动广告网络使用UDID来追踪用户的情况和动作. 苹果取消UDID意味着,应用发布者需要创建自己的UDID,以前积累的用户数据没用了.

[视频]液体镜头产品有望进入手机设备

- 琳 - cnBeta.COM
早在2004年媒体就已经在关注Varioptic公司的液体镜头技术,当时预计到2005年会有产品出现,可一晃到了2011年,这种液体镜头才开始浮出水面. 这种镜头采用两种液体组成,一种是油性的折射液,一种是导电液体,它们结合后可以通过电极控制形状,只要把这种液体包装好就是一个富含变焦能力的镜头,目前这种液体镜头正在商用过程中,最大的潜在市场可能在手机摄像头上.

扎克伯格:Facebook要占据设备而非自造手机

- - cnBeta全文版
Facebook创始人、CEO马克・扎克伯格(Mark Zuckerberg)今天接受了《连线》杂志专栏作家史蒂芬・列维(Steven Levy)的专访. 他在采访中指出,对于Facebook来说,开发手机并不是理想的发展战略,该公司的目标是将尽可能多的手机变成“Facebook手 机”,这恰恰是Facebook Home担负的使命.

8个纯CSS编写的手机设备Mock Up模型

- - 设计达人
很多设计师在交付设计稿给客户预览时,都喜欢把自己的作品放在一些手机模型或电脑模型上演示,这样可以让客户看到最终的效果输出,所以MOCK UP我们应该收藏一些,在今天的文章中,我们分享8个纯CSS编写的手机设备Mock Up模型,手机品牌有很多哦,如:iPhone5S/5C、诺基亚的Lumia 920、HTC、三星等等,下面一起看看介绍.

9个最新的手机/移动设备jQuery插件

- - 设计达人
随着互联网的流行,移动网站开始急速增加,在2014年手机网站将会出现很多,所以手机网站是必须要学会制作的. 手机网站不像桌面平台一样制作,否则会影响显示效果,目前大部分手机网站使用 响应式设计技术,而且也很流行. 但是新手想实现响应式技术是不容易的,所以我们可以用一些响应式框架或适用于移动设备的jQuery插件来制作,这样能方便实现我们的需求.

HTC 在纽约发布两款 eye 手机及手持相机设备 RE

- - 理想生活实验室
其中,HTC One M8 EYE 是在之前的 M8 基础上进行小幅升级,主要是摄像头从 400 万像素的 UltraPixel 换成 1300 万像素,其它包括显示屏、处理器等都没有变化. 这已经在 HTC 中文官网上进行更新,可以 点这里跳转过去详细了解. ▲Desire EYE 其实才是这次发布会的主角,除了造型漂亮,前后双 1300 万像素摄像头加上双色温补光灯的配置非常厉害,这也和之前大家预测的配置一样.

安卓曝大漏洞:一条彩信可控制手机,影响95%设备

- - FreeBuf.COM | 关注黑客与极客
以色列移动信息安全公司 Zimperium 研究人员 Joshua Drake 在 Android 系统中发现了多处安全漏洞,Android 2.2到5.1的所有版本上均存在此漏洞,预计会有95%的Android设备受到影响. 只需简单的一条彩信,黑客就可能完全控制用户手机. 漏洞发现于原生的 Android 的 Stagefight 媒体库上,堪称移动世界的“心脏滴血”.

iPhone 4S 是第一部使用蓝牙 4.0 的智能手机,能够传送更多小设备数据

- Chinaxingwei - Engadget 中国版
蓝芽 4.0 的标准虽然在去年七月已经完成,但采用它的智能手机现在才开始出现. 事实上,第一部使用蓝牙 4.0 的手机正是 iPhone 4S. 这个 PAN 标准的最大卖点是低功耗模式,这对 iPhone 的影响应该不太大,只是低功耗让它可以出现在一些小型电池的设备上. 这会否有助于 Apple 发展其他 iGadget 配件,成为一个枢纽呢.

微软叫嚣 WP7 是唯一公平面对所有合作商的手机系统,这叫诺基亚情何以堪

- 品味视界 - 谷奥——探寻谷歌的奥秘
微软Windows Phone的老大Andy Lees趁热打铁的称在Google收购摩托罗拉之后,Windows Phone是目前唯一一个公平面对所有合作商的智能手机操作系统. 微软先行支付上十亿美元给诺基亚作为“牵手费”,以帮助诺基亚获得运营商和消费者的支持. 诺基亚也有独占权为Winodws Phone提供地图服务,并承诺将所有诺基亚手机都默认使用Bing搜索(不仅限智能手机),他们还可自行建立以诺基亚为品牌的应用商店.