有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。
在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
现在你就可以对其进行你的应用了。
相关推荐
首先,我们需要了解在不同平台上设备唯一标识符的概念: 1. iOS:在iOS系统中,通常使用UDID(Unique Device Identifier)作为设备的唯一标识。然而,由于隐私保护政策的改变,自iOS 6开始,Apple不再提供UDID。...
总结,获取设备唯一标识符UUID在iOS开发中扮演着重要角色,特别是在需要长期跟踪用户但又尊重其隐私的情况下。通过使用KeyChain来存储UUID,我们可以确保这些信息的安全性,同时遵循Apple的隐私政策。了解并熟练掌握...
本文将深入探讨如何在Android中生成UUID以及其作为唯一标识符的优势。 UUID(Universally Unique Identifier)是一种全球唯一的标识符,它是由128位数字组成的。在Android中,我们可以使用Java的`java.util.UUID`类...
在iOS开发中,获取手机的唯一标识符以及调用系统打电话拨号功能是常见的需求,尤其是在需要用户身份识别或者提供电话服务的应用中。下面将详细讲解这两个知识点。 首先,我们来探讨如何在iOS中获取手机的唯一标识符...
Uinty获取手机端设备唯一id(设备号) 使用说明 1,GetAndroidphoneId.java 这个文件放到Plugins/Android/下 2,AndroidInterface.cs是调用Java的(与java交互) 3,新建脚本->调用 AndroidInterface.GetInstance....
如果需要获取更稳定的设备唯一标识,可以尝试使用`CFUUIDCreate`函数创建一个UUID(通用唯一标识符),并保存到Keychain中,这样可以在应用的生命周期内保持一致。然而,苹果自iOS 7开始限制了获取IMEI和UDID(唯一...
在Android和Unity集成开发中,获取设备唯一标识符是一个常见的需求,这有助于追踪用户行为、实现个性化服务或进行设备安全验证。"Android2Unity.zip"压缩包提供的资源可能是一个解决方案,将Android系统的设备标识符...
这个ID允许用户控制是否共享他们的广告活动,因此不适合用作设备唯一标识。 5. **UUID(Universally Unique Identifier)** 开发者也可以自定义生成一个UUID,存储在 SharedPreferences 或数据库中。当用户卸载再...
Unity生成设备唯一UUID,代码+样例
然而,Android系统并没有提供一个内置的、始终不变的唯一标识符,因为考虑到用户隐私和安全问题。"Android手机唯一标识"这个话题涉及到如何在Android系统中组合不同的标识来尽可能地创建一个独一无二的标识符。 1. ...
1. **UDID**(Unique Device Identifier):过去,iOS设备的UDID是一个40位的唯一标识符,但自iOS 5.1后,苹果不再推荐使用UDID,并在iOS 7中完全禁止了对外暴露UDID的API。 2. **identifierForVendor (IDFV)**:...
然而,随着Android系统的更新,为了保护用户隐私,获取设备唯一标识的方式也在不断变化。本篇文章将深入探讨几种常见的Android设备获取唯一标识码的方法。 1. **IMEI(国际移动设备识别码)** IMEI是手机硬件的全球...
在IT行业中,尤其是在移动开发领域,获取设备唯一标识码是一个常见的需求。这通常用于区分不同的设备,以便进行个性化设置、数据分析或用户身份验证。本文将深入探讨如何在C#环境下,针对PPC(Pocket PC)设备获取其...
本资料"获取Android移动终端设备唯一ID.zip"聚焦于这一主题,旨在帮助开发者了解如何在Android平台上获取设备的唯一识别码。 在Android系统中,有几种方式可以获取到设备的唯一标识: 1. **IMEI(国际移动设备识别...
本文将详细探讨“安卓设备唯一标识解决方案”,包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID)以及AndroidID和GUID等常见设备标识的获取与应用。 首先,我们来了解国内的OAID(Open ...
PhoneGap是一个开源框架,它封装了JavaScript接口,使得开发者可以通过JavaScript调用Android的API,比如获取设备的唯一标识符、电池状态、网络类型等。 在提供的压缩包文件中,"JavaApk源码说明.txt"可能包含了...
1. `DeviceIDUtils.java`:工具类的源代码,包含了获取设备唯一ID的核心逻辑。 2. `README.md`:介绍如何使用这个工具类,包括导入库、调用方法等步骤。 3. `LICENSE`:开源许可证文件,规定了代码的使用权限和条件...
Console.WriteLine("设备唯一标识符: " + deviceId.ToString()); } } ``` 这段代码通过`DeviceInformation`类的`DeviceId`属性获取了设备的GUID,并将其打印出来。这个标识符可以用于区分不同的PDA设备。 在...
iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果...
不过,IMEI在非手机设备(如平板、手表、电视)上可能不可用。 2. **Android ID**:这是一个16进制的字符串,表示设备的软件实例。每个新安装的系统都会生成一个新的Android ID,因此在设备恢复出厂设置后,Android...