Android获取设备ID号

Android有多种方式可以获取设备ID,但是每一种总会有一点限制,为此,整合几种方式在一起,这样就万无一失了

public class DeviceIdFactory {

protected static final String PREFS_FILE = "device_id.xml";protected static final String PREFS_DEVICE_ID = "device_id";protected static volatile UUID uuid;private static volatile DeviceIdFactory mInstance;private DeviceIdFactory(Context context) {    if (uuid == null) {        synchronized (DeviceIdFactory.class) {            if (uuid == null) {                final SharedPreferences prefs = context                        .getSharedPreferences(PREFS_FILE, 0);                final String id = prefs.getString(PREFS_DEVICE_ID, null);                if (id != null) {                    // Use the ids previously computed and stored in the                    // prefs file                    uuid = UUID.fromString(id);                } else {                    final String androidId = Settings.Secure.getString(                            context.getContentResolver(), Settings.Secure.ANDROID_ID);                    try {                        if (!"9774d56d682e549c".equals(androidId)) {                            uuid = UUID.nameUUIDFromBytes(androidId                                    .getBytes("utf8"));                        } else {                            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {                                String serial = null;                                try {                                    serial = Build.class.getField("SERIAL").get(null).toString();                                } catch (IllegalAccessException e) {                                    e.printStackTrace();                                } catch (NoSuchFieldException e) {                                    e.printStackTrace();                                }                                String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);                                uuid = new UUID(m_szDevIDShort.hashCode(), serial.hashCode());                            } else {                                final String deviceId = ((TelephonyManager)                                        context.getSystemService(                                                Context.TELEPHONY_SERVICE)).getDeviceId();                                uuid = deviceId != null ? UUID                                        .nameUUIDFromBytes(deviceId                                                .getBytes("utf8")) : UUID                                        .randomUUID();                            }                        }                    } catch (UnsupportedEncodingException e) {                        throw new RuntimeException(e);                    }                    // Write the value out to the prefs file                    prefs.edit()                            .putString(PREFS_DEVICE_ID, uuid.toString())                            .commit();                }            }        }    }}public static DeviceIdFactory getInstance(Context context) {    if (mInstance == null) {        synchronized (DeviceIdFactory.class) {            if (mInstance == null) {                mInstance = new DeviceIdFactory(context);            }        }    }    return mInstance;}public String  getDeviceUuid() {    TLog.v("DeviceId","getDeviceUuid "+uuid.toString());    return uuid.toString();}

}

更多相关文章

  1. Android(安卓)webview 调用android浏览器
  2. Android(安卓)的自定义Spinner组件实现方式
  3. android锁屏唤醒并解锁屏幕
  4. android 时间获取以及时间格式化
  5. 让应用程序不被任务管理器杀死...(获取系统权限)
  6. android EditText 默认情况下不获取焦点(不弹出输入框)
  7. Android去掉状态栏和标题栏的两种方式
  8. Android获取在线视频的缩略图方式对比
  9. Android全屏Activity的几种方式

随机推荐

  1. android 刚进入activity 时关闭输入法
  2. Android(安卓)(DiskLruCache)硬盘缓存代码
  3. LocationManager 的requestLocationUpdat
  4. Android Wi-Fi 修改国家码(QCOM平台)
  5. h5在线动态页面调用app原生方法
  6. Android 小代码集
  7. android9.0 关闭launcher界面的搜索框
  8. Android中怎么去掉imgview 中上下的空白?
  9. Android获取状态栏的高度
  10. Android(安卓)init.rc文件解析过程详解(