Android 获取可靠的手机编码
项目中出现了将设备和用户信息进行绑定的需求。最先想到的是IMEI串码和IMSI串码。手机登陆的时候一直都没有问题。换了一个平板中之后IMEI和IMSI串码都获取不到了。后来查了一下原因,是因为平板上是没有手机卡的。所以手机上就获取不到串码了。当然,如果运营商没有将对应的信息写入到手机卡上的时候也不能获取到对应的信息(这是网上说的,没有经过验证)。
将手机信息和用户信息进行绑定,的一个主要原则就是可靠的。不管它是什么值,硬件的值也好,网络运营商给我们的值也好,只要他够稳定就ok。
然后介绍一下网络上的各种各样的方法。有一个比较全的:http://www.cnblogs.com/anxin1225/p/3376516.html 。简单评价一下这几种方法IMEI和IMSI这个就不提了。没什么争议。
1. MAC ADDRESS:按照作者的说法。这个是肯定不能用的,我用Wifi登录和3G网络登录居然不是一个用户,果断不能接受,直接pass
2.Serial Number:部分用户获取不到,但是一旦获取到的数据就是可靠的。这个数据我们还是可以利用的。
3.ANDROID_ID:是设备第一次启动的时候产生和存储的64Bit的一个值,比较稳定。但是有缺点。在Android 2.2设备上的时候这个值不可靠。当然了,如果你的应用是刚好避开了这个弊端的话。很好,你可以不用看我废话了。直接使用这个值就好了。
4. Installtion ID : UUID:看上去很完美了。手机软件、系统重装之后,这个值应该就会改变了。
5. Pseudo-Unique ID:我觉得这个是最坑爹的一个算法。因为如果批量购买的设备里边出现相同的串码的几率可能大的吓人。
好吧开始解释一下我的想法吧。其实跟之前的差不多。
1.我们在服务器上用Id生成器来生成唯一的串码,如果你不会,@我 我会把Id生成器那一段也搞出来。
2.首先获取IMEI串码,如果有值直接将IMEI串码返回出来。
3.获取IMSI串码,如果有值,直接将IMSI串码返回出来。
4.ok,如果执行到这个地方,那就只能说明IMEI串码和IMSI串码已经失效了。我们需要弃用备用方案了。首先查看我们的数据库中有没有已经保存的可用的网络串码。如果有直接返回,如果没有从网络中获取串码,保存,并且返回出去。
public static String getPhoneId(Context context) {
String id = ""; TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
// 获取IMSI号
id = mTelephonyMgr.getSimSerialNumber();
if (!StringTools.IsNullOrEmpty(id))
return "S" + id; // 获取IMEI号
id = mTelephonyMgr.getDeviceId();
if (!StringTools.IsNullOrEmpty(id))
return "E" + id; if (StringTools.IsNullOrEmpty(id)) {
// 通过ID生成器获取编码
id = DBTools.getDataFromCommonDB(context, PHONE_ID);
if (StringTools.IsNullOrEmpty(id)) {
try {
id = "R" + IdGeneratorTools.Instance().NextLong();
DBTools.saveDataForCommonDB(context,
new KeyValuePair<String, String>(PHONE_ID, id));
} catch (Exception e) {
e.printStackTrace();
}
}
} return id;
}
我的这种方式的,对于大部分机器都是可以做到软件卸载,手机重装都不会丢失用户信息。仍然有一小部分,是没有办法做到的。但是软件数据库不清除的情况下还是非常实用的。好了,有事联系我
Android 获取可靠的手机编码的更多相关文章
- android获取手机信息大全
IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...
- Android获取手机制作商,系统版本等
在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...
- android获取手机信息2
IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...
- Android 获取手机SIM资料详解
TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取 ...
- Android 获取手机信息
private void initData() { TelephonyManager mTm = (TelephonyManager) getActivity().getSystemService(C ...
- Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息
Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...
- Android ADB工具-操作手机和获取手设备信息(四)
Android ADB工具-操作手机和获取手设备信息(四) 标签(空格分隔): Android ADB 6. 其它命令 命令 功能 adb shell input text <content&g ...
- [转] android获取手机信息大全
原文链接:http://blog.csdn.net/hytfly/article/details/8552483 IMEI号,IESI号,手机型号: private void getInfo() { ...
- 获取android的SDK或者手机目录路径
获取android的SDK或者手机目录路径 Google为我们提供了API来获取SDK或者手机目录路径: 1.获取SD卡目录 File file1 = Environment.getExternalS ...
随机推荐
- jenkins + Git 搭建持续集成环境
持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ...
- tsd-提升IDE对JavaScript智能感知的能力
在编写前端JavaScript代码时,最痛苦的莫过于代码的智能感知(Intelli Sense). 追其根源,是因为JavaScript是一门弱类型的动态语言.对于弱类型的动态语言来说,智能感知就是I ...
- VS2012编译的Windows服务启动后立即停止的解决方案
ATL中的BUG,在没有COM的服务中,使用_ATL_NO_COM_SUPPORT. 并在服务中添加下面的代码 #if defined(_ATL_NO_COM_SUPPORT) HRESULT Pre ...
- [安卓] 15、用NFC解锁手机并自动打开应用
最近接到一个项目:将手机放到一个带有NFC卡的底座上手机会自动解锁,然后打开相应的应用 本人用:杭州公交通用卡做为NFC卡+Coolpad手机进行试验 效果如下: 1.手机本身带有图案锁,输对图案才能 ...
- 翻译:AKKA笔记 - 介绍Actors
任何以前做过多线程的人都不会否认管理多线程程序是困难并且痛苦的. 我说管理是因为它开始很容易而且当你看到性能提升时会很兴奋.但是,当你看到你没法从子线程的错误中恢复 或者 这些僵尸bug很难重现 或者 ...
- Oracle查询DQL脚本记录
--查询列 Select t.sname,t.ssex,t.class from student t --t 别名; Select *from student t; --* 代表查询表内所有数据 '; ...
- VM~Linux联不上网
使用桥接的链接方式,centos6.4配置静态ip,能ping通网关,但ping 外网时出现 "network is unreachable" 如:ping www.baidu.c ...
- Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范
Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容 ...
- Atitit 泛型原理与理解attilax总结
Atitit 泛型原理与理解attilax总结 1. 泛型历史11.1.1. 由来11.2. 为什么需要泛型,类型安全21.3. 7.泛型的好处22. 泛型的机制编辑22.1.1. 机制32.1.2. ...
- 让AngularJS的$http 服务像jQuery.ajax()一样工作
让AngularJS的$http 服务像jQuery.ajax()一样工作 $http的post . 请求默认的content-Type=application/json . 提交的是json对象的字 ...