最近开发一个项目需要两个手机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位,因此提醒大家注意一下这个点。

有关获取android唯一识别号IMEI的问题相关推荐

  1. TI CC1310 sub1G的SDK开发之唯一识别号MAC地址读取

    uint64_t macAddrLsb = HWREG(FCFG1_BASE + FCFG1_O_MAC_15_4_0); uint64_t macAddrMsb =HWREG(FCFG1_BASE ...

  2. android设备唯一码的获取之一手机串号IMEI和网络识别号imsi等

    1.IMEI IMEI(International Mobile Equipment Identity)是 国际移动设备身份码 的缩写,国际移动装备辨识码,是由 15位数字组成的"电子串号& ...

  3. Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码

    1.先申请权限,关于如何申请权限请查看RxPermissions的使用(简单实用)_ErwinNakajima的博客-CSDN博客 2.手機唯一識別碼管理類. package com.phone.co ...

  4. android获取操作系统版本号,Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类...

    1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串号 6.获取手机中的语言列表 SystemUtil类 1. /** 2. ...

  5. Android获取本机号码、IMEI等

    SIM卡存储的数据可分为四类: 第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等. 第二类是暂时存放的 ...

  6. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  7. Android 唯一标识获取

    1  Android唯一表示有哪些? Device_id.Mac Address.Serial Number.Android_id.CPU序列号.物理Mac地址 2  有哪些优缺点,及获取方式 Dev ...

  8. 获取Android 手机设备信息:包括机型、操作系统版本号、手机分辨率、运营商、当前联网方式、IMEI、MEID、MAC地址

    获取Android 手机设备信息:操作系统版本号.手机分辨率.运营商.当前联网方式.IMEI.MEID.MAC地址 包括双卡机型上的两个IMEI信息 /*** Created by Administr ...

  9. Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

    Android Q获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID) 一.简介 1.1 问题背景 1.2 关键技术 二.解决方案 2.1 谷歌官方推荐方案 (4种) 2.2 实现方 ...

最新文章

  1. 学 Redis ,至少要看看这篇!7000 字小结
  2. Django搭建简单的站点
  3. linux 内核 4.10.0,Bodhi Linux 4.2.0发布下载,运行Linux内核4.10
  4. Linux使用locate命令查找,Linux如何使用locate命令查找数据(2)
  5. 老板啥都懂,还天天套路我?!
  6. java ui线程_UI线程异常处理方法
  7. python3.6 配置COCO API出错解决方案
  8. python 几何计算_计算几何-凸包算法 Python实现与Matlab动画演示
  9. systemctl和正则表达式
  10. 人工智能算法自动化测试_自动化:算法如何塑造我和你的生活
  11. asp php 一句话,ASP_asp一句话木马原理分析,通过HTTP协议来访问 一句话木 - phpStudy...
  12. 计算机社团打字游戏,计算机打字兴趣小组计划.doc
  13. Java体系十大组织
  14. 对话南科大沈平:在人工智能开源中,高校能扮演什么角色?
  15. SuperPoint:Self-Supervised Interest Point Detection and Description 论文阅读
  16. Redis从库失败导致集群概率读不到
  17. MIGO 收货批次增强
  18. 分享50个漂亮的设计师个人作品集网站案例
  19. Failed to exceute script *.exe (pyinstaller生成的exe文件)
  20. MTK wifi AP mode/wifi 热点模式的相关问题

热门文章

  1. 将网页保存为图片--修改
  2. 【案例28】银行对账单管理-在线下载优化记录
  3. 3年Android开发工程师面试经验分享,先收藏了
  4. 视频网站主机服务器,视频网站主机服务器
  5. 浅谈光耦电路在开关量采集电路中的设计
  6. 开源社区那些事|社区分享
  7. VMware虚拟网络编辑器用法
  8. 润和软件携手高鸿信安助力构建可信计算生态
  9. 微信又确定全新封号标准!触犯这几条底线将被永久封号,望周知
  10. 安卓-电子签名signature