有关获取android唯一识别号IMEI的问题
2018-01-11 13:17
176 查看
最近开发一个项目需要两个手机app互相通信,在一个手机不同的app之前通信可以用aidl,在不同的手机通信就需要用到网络(除通过运营商之外),我用的是socket通信,那么涉及到一个问题,服务器收到了某客户端发来的消息后到底转发给哪个手机的客户端呢,于是就想到了找到android手机的唯一识别号,有很多方式获得对一部手机的标识,但是获得手机的IMEI是误差最小的,也有可能获取不到的情况,但概率非常小,获得IMEI的代码如下
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
imei = TelephonyMgr.getDeviceId();
最初我是在oncreate方法里获得的,自然没问题,后来随着需求改变,我需要在与服务器通信一个子线程中得到activty中获得的IMEI,首先想到新建了一个java文件(之后仔细一想这是个错误的思路,直接用hundler就好了啊,但是这个错误的思路带给我一个新的问题,使我更深入的了解了context),专门用来获得IMEI,但是这个方法出错了
才发现是因为getSystemService是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。由于activity继承context,context贯穿了android最重要的部分,下面看一下context的继承结构
而我新建的java文件并没有传入一个上下文对象,因此出错了,解决方法是
这样就没有错误了。
显然这么做并不能解决问题,因为我的目的是让activity数据与子线程之前传递,现在我新建了一个类显然无意义,但是我又发现了一个问题,在我的activity的oncreate方法里获得的IMEI码
然后用第二种方式(即新建一个文件来实现获得IMEI功能,在MainActivity中调用这个方法)
然后显示结果是
为啥这两种方式获得的码不一样呢?(细心的可能会发现这里我获得的是IMSI码。因为一个是getDeviceId(),而第二种方法是getSubscriberId())
getDeviceId()是获得国际移动身份识别码,此码是全世界唯一。getSubscriberId()是国际移动用户识别码,是区别移动用户的标志。所以两个码不一样,这里使用IMEI码。
好了,现在回归正题,用handler传送IMEI,还有一个要注意的我的手机得到的IMEI是14位的,我以为是15位的呢,可能是刷机后就成了14位,在截取服务器发来的数据的时候String
getserverrecIMEI=content.substring(1, 16);出错,细数了一下才发现自己的IMEI是14位,因此提醒大家注意一下这个点。
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
imei = TelephonyMgr.getDeviceId();
最初我是在oncreate方法里获得的,自然没问题,后来随着需求改变,我需要在与服务器通信一个子线程中得到activty中获得的IMEI,首先想到新建了一个java文件(之后仔细一想这是个错误的思路,直接用hundler就好了啊,但是这个错误的思路带给我一个新的问题,使我更深入的了解了context),专门用来获得IMEI,但是这个方法出错了
才发现是因为getSystemService是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。由于activity继承context,context贯穿了android最重要的部分,下面看一下context的继承结构
而我新建的java文件并没有传入一个上下文对象,因此出错了,解决方法是
这样就没有错误了。
显然这么做并不能解决问题,因为我的目的是让activity数据与子线程之前传递,现在我新建了一个类显然无意义,但是我又发现了一个问题,在我的activity的oncreate方法里获得的IMEI码
然后用第二种方式(即新建一个文件来实现获得IMEI功能,在MainActivity中调用这个方法)
然后显示结果是
为啥这两种方式获得的码不一样呢?(细心的可能会发现这里我获得的是IMSI码。因为一个是getDeviceId(),而第二种方法是getSubscriberId())
getDeviceId()是获得国际移动身份识别码,此码是全世界唯一。getSubscriberId()是国际移动用户识别码,是区别移动用户的标志。所以两个码不一样,这里使用IMEI码。
好了,现在回归正题,用handler传送IMEI,还有一个要注意的我的手机得到的IMEI是14位的,我以为是15位的呢,可能是刷机后就成了14位,在截取服务器发来的数据的时候String
getserverrecIMEI=content.substring(1, 16);出错,细数了一下才发现自己的IMEI是14位,因此提醒大家注意一下这个点。
相关文章推荐
- android设备唯一码的获取之一手机串号IMEI和网络识别号imsi等
- 一起学android之如何获取Android设备的唯一识别码笔记(21)
- 关于获取设备的唯一设备ID,MAC地址 IOS/Android问题
- Android手机获取手机唯一识别号
- Android WebView 文本框获取焦点后自动放大有关问题
- Android 手机上获取物理唯一标识码 IMEI和UUID
- Android开发笔记 合理解决获取唯一标识符及其授权问题
- Android 获取手机IMEI (串号) 手机唯一标识
- 安卓获取渠道名渠道id Android获取设备唯一标识的终极解决方法,防止安卓7.0时崩溃问题
- android手机获取手机唯一识别号
- Android设备获取IMEI唯一识别码
- android中获取设备的型号、手机厂商以及手机唯一标识符IMEI
- 有关Google nexus7 连接PC后MTP无法识别的问题(系统是android 4.3)
- android怎么获取一个SD卡指定文件夹的图片Uri uri有关问题
- Android中获取手机IMEI,IMSI, MAC(Android 6.0)工具类(标识用户唯一)
- Android手机获取手机唯一识别号(转)
- (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题
- Android中获取手机IMEI,IMSI, MAC(Android 6.0、支持4G环境获取)工具类(标识用户唯一)
- android 获取设备唯一标识:imei 通过TelephonyManager
- 获取手机(ios,android)的设备唯一码(mac地址, IMEI)