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 ...
随机推荐
- nginx(4、缓存)
nginx提供内置的缓存功能,对静态文件,如html\css\js等能够缓存在本地,即nginx服务器的某个目录下. 其配置主要是两部分: 1.在http下配置一个缓存路径: proxy_cache_ ...
- 团队项目——站立会议DAY6
团队项目--站立会议 DAY6 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/13),站立会议已进行了一周时间,大家将这一周所遇到的问题和 ...
- java生成压缩文件
在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutput ...
- iOS——Core Animation 知识摘抄(四)
原文地址http://www.cocoachina.com/ios/20150106/10840.html 延迟解压 一旦图片文件被加载就必须要进行解码,解码过程是一个相当复杂的任务,需要消耗非常长的 ...
- 用DirectX实现魔方(三)视角变换及缩放(附源码)
在本系列第一篇介绍过鼠标按键的功能,如下. 左键拖拽 - 旋转魔方 右键拖拽 - 变换视角 滚轮 - 缩放魔方 今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现M ...
- ejs模板中的四种表达式输出形式
在ejs模板中,通常会用下面四种方式在HTML中输出服务端的变量或表达式的值: 1. 直接在<%%>中写表达式或变量.这种情况通常只是用来进行表达式计算或给变量赋值,不会有任何输出,被称作 ...
- String的length()和Array的length
String是个final修饰的最终类,不能被继承,String中属性都设置为private,方法为public,并不提供set方法,想要获得字符串的长度必须调用length()方法这个长度是确定的, ...
- Oracle日期时间函数大全
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits ...
- 大叔也说Xamarin~Android篇~支付宝SDK的集成
回到目录 首先做为支付宝SDK它提供了多种平台,网页版,wap版,IOS版,android版等等,今天主要说一下在xamarin里使用android平台的sdk的方法,在网上介绍这块的文章不多,大叔本 ...
- 在Windows下安装Memcached
Windows下的Memcache安装: 需要运行命令行工具cmd 请以管理员权限运行 开始->附件->命令提示符,以管理员身份运行 假如当前C:\windows\system32,输入c ...