资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
如何检索 Android 设备的唯一 ID关于本文档Android 的开发者在一些特定情况下都需要知道手机中的唯一设备 ID。例如,跟踪应用程序的安装,生成用于复制保护的 DRM 时需要使用设备的唯一 ID。在本文档结尾处提供了作为参考的示例代码片段。范围本文提供有关如何读取各种 Android 设备的 ID 的介绍,用以使用标识号。本文假定用户已经安装了 Android 以及开发应用程序必要的工具。并且,本文假定用户已了解 Android的基本知识。简介在搭载 Android 操作系统的设备中,已经存在好几种类型的设备标识号。先前的所有Android 设备都具有电话功能,因此查找每部设备硬件唯一的 IMEI,MEID,或 ESN 也很容易。但仅能使用 Wifi 的设备或音乐播放器没有电话硬件,所以没有这种类型的唯一标识号。本文阐述了如何读取不同 Android 设备的标识号。检索 Android 设备 ID 各种方式以下是 Android 设备不同类型的识别设备 ID。 唯一编号(IMEI,MEID,ESN,IMSI) MAC 地址 序列号 ANDROID_ID唯一编号(IMEI,MEID,ESN,IMSI)说明在以前,当 Android 设备均作为电话使用时,寻找唯一标识号比较简单:()可用于找到(取决于网络技术)手机硬件唯一的 IMEI,MEID,ESN 和 IMSI 编号。TelephonyManager.getDeviceIdIMEI,MEID,ESN,IMSI 的定义如下:IMEI(国际移动设备识别码)唯一编号,用于识别 GSM,WCDMA 手机以及一些卫星电话(移动设备识别码)全球唯一编号,用于识别 CDMA 移动电台设备的物理硬件,MEID 出现的目的是取代 ESN 号段(电子序列号) (电子序列号)唯一编号,用于识别 CDMA 手机(国际移动用户识别码)与所有 GSM 和 UMTS 网络手机用户相关联的唯一识别编号如需要检索设备的 ID,在项目中要使用以下代码:MEIDESNIMSIjava view plaincopyimport android.telephony.TelephonyManager; import android.content.Context; String imeistring = null; String imsistring = null; TelephonyManager telephonyManager; telephonyManager = (TelephonyManager) getSystemService( Context.TELEPHONY_SERVICE ); /* * getDeviceId() function Returns the unique device ID. * for example,the IMEI for GSM and the MEID or ESN for CDMA phones. */ imeistring = telephonyManager.getDeviceId(); /* * getSubscriberId() function Returns the unique subscriber ID, * for example, the IMSI for a GSM phone. */ imsistring = telephonyManager.getSubscriberId(); 如要只读取手机的状态,则需添加 READ_PHONE_STATE 许可到 AndroidManifest.xml 文件中。缺点Android 设备要具有电话功能其工作不是很可靠序列号当其工作时,该值保留了设备的重置信息(“恢复出厂设置” ) ,从而可以消除当客户删除自己设备上的信息,并把设备转另一个人时发生的错误。Mac 地址说明可通过检索找到设备的 Wi - Fi 或蓝牙硬件的 Mac 地址。但是,不推荐使用 Mac 地址作为唯一的标识号。缺点设备要具备 Wi Fi 功能(并非所有的设备都有 Wi Fi 功能)如果设备目前正在使用 Wi - Fi,则不能报告 Mac 地址序列号从 Android 2.3(“姜饼” )开始,通过 android.os.Build.SERIAL 方法序列号可被使用。没有电话功能的设备也都需要上给出唯一的设备 ID; 某些手机也可以需要这样做。序列号可以用于识别 MID(移动互联网设备)或 PMP(便携式媒体播放器) ,这两种设备都没有电话功能。通过读取系统属性值“ro.serialno”的方法,可以使用序列号作为设备 ID 。如检索序列号并作为设备 ID 使用,请参考下面的代码示例。java view plaincopyimport java.lang.reflect.Method; String serialnum = null; try Class c = Class.forName(android.os.SystemProperties); Method get = c.getMethod(get, String.class, String.class ); serialnum = (String)( get.invoke(c, ro.serialno, unknown ) ); catch (Exception ignored) 缺点序列号无法在所有 Android 设备上使用。ANDROID_ID说明更具体地说,Settings.Secure.ANDROID_ID 是一串 64 位的编码(十六进制的字符串) ,是随机生成的设备的第一个引导,其记录着一个固定值,通过它可以知道设备的寿命(在设备恢复出厂设置后,该值可能会改变) 。 ANDROID_ID 也可视为作为唯一设备标识号的一个好选择。如要检索用于设备 ID 的 ANDROID_ID,请参阅下面的示例代码String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);缺点 对于 Android 2.2(“Froyo” )之前的设备不是 100的可靠 此外,在主流制造商的畅销手机中至少存在一个众所周知的错误,每一个实例都具有相同的 ANDROID_ID。 结论对于绝大多数应用来说,只需识别特定的安装配置,而不需要识别物理设备。所幸是,这样做就省去了麻烦。下面是部分使用设备 ID 的最佳途径:支持各种设备类型的另一种方法是使用 getDeviceID()API 和 ro.serialno 的组合有许多值得参考的原因,来提醒开发者避免试图识别特定的设备。对于那些想做一下这方面尝试的用户, 最好的办法可能是使用 ANDROID_ID,并在一些传统设备上做尝试。示例代码下面是用于追踪 Android 设置的示例代码类: ReadDeviceID.javajava view plaincopypackage com.deviceid; import java.lang.reflect.Method; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.provider.Settings; import android.telephony.TelephonyManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ReadDeviceID extends Activity Button bt; TextView idView; /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); bt=(Button)findViewById(R.id.button1); idView=(TextView)findViewById(R.id.textView1); bt.setOnClickListener(new OnClickListener() Override public void onClick(View v) String imeistring=null; String imsistring=null; TelephonyManager telephonyManager = ( TelephonyManager)getSystemService( Context.TELEPHONY_SERVICE ); /* * getDeviceId() function Returns the unique device ID. * for example,the IMEI for GSM and the MEID or ESN for CDMA phones. */ imeistring = telephonyManager.getDeviceId(); idView.append(IMEI No : +imeistring+n); /* * getSubscriberId() function Returns the unique subscriber ID, * for example, the IMSI for a GSM phone. */ imsistring = telephonyManager.getSubscriberId(); idView.append(IMSI No : +imsistring+n); /* * System Property ro.serialno returns the serial number as unique number * Works for Android 2.3 and above */ String hwID = android.os.SystemProperties.get(ro.serialno, unknown); idView.append( hwID : + hwID + n ); String serialnum = null; try Class c = Class.forName(android.os.SystemProperties); Method get = c.getMethod(get, String.class, String.class ); serialnum = (String)( get.invoke(c, ro.serialno, unknown ) ); idView.a
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号