Android获取设备ID号
16lz
2021-12-04
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();}
}
更多相关文章
- Android(安卓)webview 调用android浏览器
- Android(安卓)的自定义Spinner组件实现方式
- android锁屏唤醒并解锁屏幕
- android 时间获取以及时间格式化
- 让应用程序不被任务管理器杀死...(获取系统权限)
- android EditText 默认情况下不获取焦点(不弹出输入框)
- Android去掉状态栏和标题栏的两种方式
- Android获取在线视频的缩略图方式对比
- Android全屏Activity的几种方式