Android设备不同类型的识别设备ID。·唯一编号(IMEI,MEID,ESN,IMSI)·MAC地址·序列号·ANDROID_ID唯一编号(IMEI,MEID,ESN,IMSI)说明在以前,当Android设备均作为电话使用时,寻找唯一标识号比较简单:()可用于找到(取决于网络技术)手机硬件唯一的IMEI,MEID,ESN和IMSI编号。TelephonyManagergetDeviceIdIMEI,MEID,ESN,IMSI的定义如下:•IMEI(国际移动设备识别码)唯一编号,用于识别GSM,WCDMA手机以及一些卫星电话(移动设备识别码)全球唯一编号,用于识别CDMA移动电台设备的物理硬件,MEID出现的目的是取代ESN号段(电子序列号)(电子序列号)唯一编号,用于识别CDMA手机(国际移动用户识别码)与所有GSM和UMTS网络手机用户相关联的唯一识别编号如需要检索设备的ID,在项目中要使用以下代码:•MEID•ESN•IMSIimportandroidtelephonyTelephonyManager;importandroidcontentContext;Stringimeistring=null;Stringimsistring=null;{TelephonyManagertelephonyManager;telephonyManager=(TelephonyManager)getSystemService(ContextTELEPHONY_SERVICE);/getDeviceId()functionReturnstheuniquedeviceIDforexample,theIMEIforGSMandtheMEIDorESNforCDMAphones/imeistring=telephonyManagergetDeviceId();/getSubscriberId()functionReturnstheuniquesubscriberID,forexample,theIMSIforaGSMphone/imsistring=telephonyManagergetSubscriberId();}
Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值。id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc、@+id/xyz等。如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在Rjava文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在Rjava文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在Rjava中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。也就是说,如果使用@+id/name形式,当Rjava中存在名为name变量时,则该组件会使用该变量的值作为标识。如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。 既然组件的id属性是一个资源id就可以,那么自然可以设置任何已经存在的资源id值,例如,@drawable/icon、@string/ok、@+string/you等。当然,也可以设置android系统中已存在的资源id,例如,楼主提出的@id/android:list,那么这个android是什么意思呢,实际上,这个android就是系统的R类(在Rjava文件中)所在的package。我们可以在Java代码编辑区输入androidRid,就会列出相应的资源id,例如,也可以设置id属性值为@id/android:message。<ListView android:id="@+id/android:message" android:layout_width="wrap_content" android:layout_height="wrap_content"/>还有另外一种方法查看系统中定义的id,进入<android sdk安装目录>\platforms\android-15\data\res\values目录,找到idsxml文件,打开后,内容如下:<xml version="10" encoding="utf-8"><resources><item type="id" name="price_edit">false</item><item type="id" name="amount_edit">false</item></resources>若在idsxml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit
TelephonyManager tm = (TelephonyManager)
thisgetSystemService(TELEPHONY_SERVICE);
String imei =
tmgetDeviceId(); //取出IMEI
Logd(TAG, "IMEI:"+imei);
String tel =
tmgetLine1Number(); //取出MSISDN,很可能为空
Logd(TAG,
"MSISDN:"+tel);
String iccid =tmgetSimSerialNumber();
//取出ICCID
Logd(TAG, "ICCID:"+iccid);
String imsi
=tmgetSubscriberId(); //取出IMSI
Logd(TAG,
"IMSI:"+imsi);
在manifestxml文件中要添加
<uses-permission android:name="androidpermissionREAD_PHONE_STATE" />
目前市面上的一面新机,基本都是Hook到TelephonyManager getDeviceId 方法,如何绕过?
getDeviceId 底层实现:
Android 获取Imei 接口主要由 TelephonyManager getDeviceId 来获取。
在Java层通过RILJ 和 RILD建立通讯socket,来和modem(基带芯片)建立沟通 获取返回值。
和RILD建立链接需要有Root系统权限,所以,如果获取了root权限,可以绕过系统的Api来获取IMEI,如果没有Root权限,或者是系统uid的话 基本没办法绕过getDeviceId
很多境外电商亚马逊刷单的方案已经过时,一键新机只有从底层定制才靠谱的。这个有研究的可以和我沟通交流。
主要做权限的检测
PhoneSubInfoController
以上就是关于如何获取GAID,Android ID和IMEI全部的内容,包括:如何获取GAID,Android ID和IMEI、android 已知控件的id名 怎么得到其id值、android 怎样读取ID卡序列号呀,谢谢,急等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)