项目中出现了将设备和用户信息进行绑定的需求。最先想到的是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. Flash 与 php 使用 amfphp

    创建 Flash 项目 使用 Flash Builder 创建一个项目. 创建 Flash 项目时,选择服务器技术为 PHP,并配置好服务器的 Web 根文件夹及根 URL 地址(这里设置根文件夹时, ...

  2. 在ThoughtWorks工作这几年我学到了什么?

    不知不觉,从2012年5月1日加入ThoughtWorks到现在,已经3年有余了.时间过得很快,这三年多我干了很多事情,但仔细想想也没有什么特别值得一提的.在一个公司呆久了总觉得很多事情是理所当然的, ...

  3. 几款开源的图形化Redis客户端管理软件

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/98.html?1455870209 Redis是一个超精简的基于内存的键值 ...

  4. Bootstrap~日期控制

    回到目录 一个成熟的框架,日期控制是少不了的,在网上也有很多日期控制可以选择,而主框架用了bootstrap,日期控制也当前要用它自己的, 控件地址:http://www.bootcss.com/p/ ...

  5. fir.im Weekly - iOS开发中的Git流程

    本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...

  6. js 字符串的操作

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. Android Activity 启动模式和任务栈

    在了解了基本的Activity的生命周期后,我们能够很好的在一个Activity上面做相关的业务.但是这是不够的,因为Android通过任务栈来保存整个APP的Activity,合理的调度任务栈才能够 ...

  8. android 股票数据通过日K获取周K的数据 算法 源码

    目前的数据是从新浪接口获取的, http://biz.finance.sina.com.cn/stock/flash_hq/kline_data.php?symbol=sh600000&end ...

  9. 快速入门系列--WCF--06并发限流、可靠会话和队列服务

    这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的 ...

  10. 【转】“正由另一进程使用,因此该进程无法访问该文件”的问题&解决方法

    正在写一个手指画图的程序C# + WPF其中有一部分是加载外部某PNG文件,放入BitmapImage,再作为Image的Source显示在Canvas上画了几笔之后,再存回这个PNG文件 ===== ...