zoukankan      html  css  js  c++  java
  • 难题:识别独立安卓设备

    今天碰巧朋友问到我怎么识别独立的安卓手机,就花了一些时间琢磨了一下。
    其实这个问题可以秒答,就是IMEI。

    
    TelephonyManager.getDeviceId();
    

    这需要一个权限:

    
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    

    问题如果这么简单就好了,问题在于:

    因此其实问题从这里才开始。网上能够搜索到的解决方案有以下几点:

    - WIFI MAC

    一个方案是优先采用IMEI,当IMEI相同时,再比较WIFI的MAC地址。但如果手机没有WIFI功能或者WIFI功能没有开启(飞行模式),则无法获取到MAC地址。更加让人惆怅的是,我国大山寨厂商实在是懒透了,无线网卡的MAC地址居然也不修改,不少自刷机的也是这病情(例如这个这个还有这个)。至于说蓝牙MAC地址就更别说了。IMEI重复的病因,与MAC地址相同的其实是一个原因,都是刷机或山寨,所以这个wifi MAC地址的方案其实算不上互补了,必须另谋途径。

    - Serial NO

    另一个方案是用serial NO。这个值仅在android 2.3版本以上才提供支持。通过adb可以这样查看:

    
    adb shell getprop ro.serialno
    

    代码中可使用系统变量android.os.Build.SERIAL访问。如果这个值能够取到这是仅次于IMEI的最好方法了。缺点是这个值在2.2及以下版本的android系统不支持。不过好在如今的安卓世界2.2及以下的占有率已经越来越低了,翻新速度很快,因此这个值很值得一试。

    - Android id

    其实安卓系统提供了Settings.Secure.ANDROID_ID来获取唯一设备号。

    
    import android.provider.Settings.Secure;
    
    private String android_id = Secure.getString(
                                getContext().getContentResolver(),
                                Secure.ANDROID_ID); 
    

    但同样2.2以前的系统支持得不好。这个值是系统初次启动后生成的,因此恢复出厂设置后这个值会变,导致观测到的设备数虚高。在手机刷机、重置频繁的环境,这个值是不靠谱的。另外某大厂生产的设备居然有个BUG,这个值是会重复的(DROID2),因此这个值还是别用为好。

    - generated UUID

    最后还有一个自己生成UUID的办法,保存这个ID,每次访问服务器时上传,自己告诉系统自己是谁。这个方法比所有硬件方法都更不靠谱,因为只需卸载软件和清理数据就会导致这个值被删除,从而产生新的UUID,造成观测到的设备数量虚高。更别说刷机和恢复出厂设置了。这个方法非常适合用来统计软件安装次数,而非独立设备数。

    结论

    综上所述,目前为止我还没找到非常完美的统计独立设备的方案,尤其是在中国这个水货、硬解、山寨、刷机市场泛滥和不规范的安卓世界,更是难上加难。

    但是反过来想,是不是一台完全刷新,安装了全新的ROM的手机,就已经不是原来的那台手机了呢?统计独立设备数的目的究竟是什么?如果要的是独立活跃设备数,其实用自己生成的UUID已经足够,因为原来使用的那个UUID已经失去活性,可以忽略了。对于APP开发者而言这个情况与用户换了一台手机,完全弃用旧手机的情况其实是一样的。假如是采取活跃UUID的方式,则即使是使用ANDROID_ID或者自己生成的UUID都是可取的做法了。

    摘自

    http://www.hawkwithwind.net/blog/2013/04/24/%E9%9A%BE%E9%A2%98%EF%BC%9A%E8%AF%86%E5%88%AB%E7%8B%AC%E7%AB%8B%E5%AE%89%E5%8D%93%E8%AE%BE%E5%A4%87/

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/xd502djj/p/3741914.html
Copyright © 2011-2022 走看看