http://blog.csdn.net/langresser_king/article/details/9373051

1、正常情况下可以通过((TelephonyManager) s_instance.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();  来获取,但是某些平板电脑此函数会返回空

2、通过 Secure.getString(s_instance.getContentResolver(), Secure.ANDROID_ID);   也可以获取到一个id,但是android2.2或者是某些山寨手机使用这个也是有问题的,它会返回一个固定的值 9774d56d682e549c

3、如果前两个都没有获取到udid,那么就在程序启动的时候创建一个随机的uuid,然后保存起来。这个算是兼容方案,当然这样的设备并不会很多。

或者OpenUDID

https://github.com/vieux/OpenUDID

 

protected static final String PREFS_FILE = "gank_device_id.xml";    protected static final String PREFS_DEVICE_ID = "gank_device_id";    protected static String uuid;    /**     * 获取唯一标识码     * @param mContext     * @return     */    public synchronized static String getUDID(Context mContext)    {        if( uuid ==null ) {                if( uuid == null) {                    final SharedPreferences prefs = mContext.getApplicationContext().getSharedPreferences( PREFS_FILE, Context.MODE_PRIVATE);                    final String id = prefs.getString(PREFS_DEVICE_ID, null );                    if (id != null) {                        // Use the ids previously computed and stored in the prefs file                        uuid = id;                    } else {                        final String androidId = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID);                        // Use the Android ID unless it's broken, in which case fallback on deviceId,                        // unless it's not available, then fallback on a random number which we store                        // to a prefs file                        try {                            if (!"9774d56d682e549c".equals(androidId)) {                                uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")).toString();                            } else {                                final String deviceId = ((TelephonyManager) mContext.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId();                                uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString();                            }                        } catch (UnsupportedEncodingException e) {                            throw new RuntimeException(e);                        }                        // Write the value out to the prefs file                        prefs.edit().putString(PREFS_DEVICE_ID, uuid).commit();                    }                }        }        return uuid;    }

 

更多相关文章

  1. C语言函数的递归(上)
  2. Android常用控件-DatePicker以及对话框的两种使用方法
  3. Android(安卓)ListView拖动时背景颜色会变成黑色 的解决办法
  4. Android在标准linux基础上对休眠唤醒的实现(一)
  5. Android(安卓)Frament中add,repalce,hide,show用法
  6. Android函数重构(MVC)
  7. Android系统Home应用程序(Launcher)的启动过程源代码分析
  8. Android(安卓)wifi设计原理(源码分析)
  9. Android(安卓)实时视频采集

随机推荐

  1. Android应用数字签名详解
  2. Android下EditText中的字体不统一问题
  3. Android网络收音机项目
  4. Android(安卓)App动态显示多个入口
  5. Android性能调优工具TraceView介绍
  6. Android(安卓)手写签名实例
  7. Android日志系统Logcat源代码简要分析
  8. Android探索之路(一)——消息处理机制
  9. Android开发框架SmartAndroid2.0 强劲框
  10. Android设计登陆界面