项目中出现了将设备和用户信息进行绑定的需求。最先想到的是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 获取可靠的手机编码的更多相关文章

  1. android获取手机信息大全

    IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...

  2. Android获取手机制作商,系统版本等

    在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...

  3. android获取手机信息2

    IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...

  4. Android 获取手机SIM资料详解

    TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取 ...

  5. Android 获取手机信息

    private void initData() { TelephonyManager mTm = (TelephonyManager) getActivity().getSystemService(C ...

  6. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  7. Android ADB工具-操作手机和获取手设备信息(四)

    Android ADB工具-操作手机和获取手设备信息(四) 标签(空格分隔): Android ADB 6. 其它命令 命令 功能 adb shell input text <content&g ...

  8. [转] android获取手机信息大全

    原文链接:http://blog.csdn.net/hytfly/article/details/8552483 IMEI号,IESI号,手机型号: private void getInfo() { ...

  9. 获取android的SDK或者手机目录路径

    获取android的SDK或者手机目录路径 Google为我们提供了API来获取SDK或者手机目录路径: 1.获取SD卡目录 File file1 = Environment.getExternalS ...

随机推荐

  1. 【C语言学习】《C Primer Plus》第12章 存储类、链接和内存管理

    学习总结 1.作用域可分为代码块作用域.函数原型作用域或者文件作用域. 代码块作用域例子: { for(int i=0;i<10;i++){  //C99允许 …  //i的作用域 } ... ...

  2. TypeScript - 基本类型系统

    对于程序来说我们需要基本的数据单元,如:numbers, strings, structures, boolean 等数据结构.在TypeScript中我们支持很多你所期望在JavaScript中所拥 ...

  3. ng-template寄宿方式

    如果你是一个angular的开发者的话,对于ng-html2js你应该 很熟悉.对于angular的指令,我们经常需要定义模板( directive template/templateUrl),你可以 ...

  4. the bundle at bundle path is not signed using an apple submission certificate

    在app上架的时候,出现这个错误,也许只是你的Apple Worldwide Developer Relations Certification Authority Intermediate Cert ...

  5. svn 忽略文件不管用

    svn 不能对已添加过版本控制的文件进行忽略.于是乎,你会发先,你怎么忽略都不起作用.于是乎,该怎么办? svn忽略已添加到版本库文件或文件夹步骤: 将要忽略的文件或文件夹剪切到非工作拷贝目录. 在父 ...

  6. IOS 公共类-MyMBProgressUtil Progress显示

    IOS 公共类-MyMBProgressUtil Progress显示 此公共类用于显示提示框,对MBProgress的进一步封装.可以看下面的代码 接口: @interface MyMBProgre ...

  7. Visual Studio 2010 实用功能:使用web.config发布文件替换功能

    当建立ASP.NET Web应用程序项目后,默认除了生成web.config外,还生成了web.debug.config与Web.Release.config.顾名思义,根据它们的命名我可以推测到他们 ...

  8. Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范

    Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容 ...

  9. WebKit技术内幕

    WebKit技术内幕(浏览器内核|渲染引擎| HTML5| Chromium项目Committer重磅作品) 朱永盛 著   ISBN 978-7-121-22964-0 2014年6月出版 定价:7 ...

  10. Backbone中 View之间传值的解决办法

    Backbone中的View就是用来展示由Model层传出的数据,或者在View里产生的一些数据,包括输入框中输入等产生的数据,由当前View传递到另外一个View层里,应该怎么办呢,我之前读到一位博 ...