Android设备ID获取(Android高手进阶-设备唯一ID生成)

首页教程更新时间:2023-05-31 18:49:33

开发中有需求,需要获取设备的唯一id,好验证用户在卸载后再安装恢复用户数据,于是就,
获取设备唯一ID的逻辑。

如果Android10以上->在设备的外部目录创建UUID,只要用户没有手动删除该文件UUID一直存在。如果Android10以下,获取设备IMEI 如果没有获取到IMEI->在设备外部目录创建UUIID如果考虑IMEI是私密信息,可以对IMEI做MD5再返回。

import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.provider.MediaStore; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.inputStreamReader; import java.io.OutputStream; import java.util.UUID; /** * jason */ public final class DeviceIdUtils { private static final String TAG = DeviceIdUtils.class.getSimpleName(); private static final String TEMP_DIR = "system_config"; private static final String TEMP_file_NAME = "system_file"; private static final String TEMP_FILE_NAME_MIME_TYPE = "application/octet-stream"; private static final String SP_NAME = "device_info"; private static final String SP_KEY_DEVICE_ID = "device_id"; public static String getDeviceId(Context context) { SharedPreferences sharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); String deviceId = sharedPreferences.getString(SP_KEY_DEVICE_ID, null); if (!TextUtils.isEmpty(deviceId)) { return deviceId; } deviceId = getIMEI(context); if (TextUtils.isEmpty(deviceId)) { deviceId = createUUID(context); } sharedPreferences.edit() .putString(SP_KEY_DEVICE_ID, deviceId) .apply(); return deviceId; } private static String createUUID(Context context) { String uuid = UUID.randomUUID().toString().replace("-", ""); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) { Uri externalContentUri = MediaStore.Downloads.EXTERNAL_CONTENT_URI; ContentResolver contentResolver = context.getContentResolver(); String[] projection = new String[]{ MediaStore.Downloads._ID }; String selection = MediaStore.Downloads.TITLE "=?"; String[] args = new String[]{ TEMP_FILE_NAME }; Cursor query = contentResolver.query(externalContentUri, projection, selection, args, null); if (query != null && query.moveToFirst()) { Uri uri = ContentUris.withAppendedId(externalContentUri, query.getLong(0)); query.close(); InputStream inputStream = null; BufferedReader bufferedReader = null; try { inputStream = contentResolver.openinputStream(uri); if (inputStream != null) { bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); uuid = bufferedReader.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } else { ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Downloads.TITLE, TEMP_FILE_NAME); contentValues.put(MediaStore.Downloads.MIME_TYPE, TEMP_FILE_NAME_MIME_TYPE); contentValues.put(MediaStore.Downloads.DISPLAY_NAME, TEMP_FILE_NAME); contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS File.separator TEMP_DIR); Uri insert = contentResolver.insert(externalContentUri, contentValues); if (insert != null) { OutputStream outputStream = null; try { outputStream = contentResolver.openOutputStream(insert); if (outputStream == null) { return uuid; } outputStream.write(uuid.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } else { File externalDownloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File applicationFileDir = new File(externalDownloadsDir, TEMP_DIR); if (!applicationFileDir.exists()) { if (!applicationFileDir.mkdirs()) { Log.e(TAG, "文件夹创建失败: " applicationFileDir.getPath()); } } File file = new File(applicationFileDir, TEMP_FILE_NAME); if (!file.exists()) { FileWriter fileWriter = null; try { if (file.createNewFile()) { fileWriter = new FileWriter(file, false); fileWriter.write(uuid); } else { Log.e(TAG, "文件创建失败:" file.getPath()); } } catch (IOException e) { Log.e(TAG, "文件创建失败:" file.getPath()); e.printStackTrace(); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } } else { FileReader fileReader = null; BufferedReader bufferedReader = null; try { fileReader = new FileReader(file); bufferedReader = new BufferedReader(fileReader); uuid = bufferedReader.readLine(); bufferedReader.close(); fileReader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (fileReader != null) { try { fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } } } return uuid; } private static String getIMEI(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { return null; } try { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager == null) { return null; } @SuppressLint({"MissingPermission", "HardwareIds"}) String imei = telephonyManager.getDeviceId(); return imei; } catch (Exception e) { return null; } } }

想了解更多android编程知识,请关注谢谢

,
图文教程
相关文章
热门专题
推荐软件
奇热小说
奇热小说
下载
QQ2019手机版
QQ2019手机版
下载
王者荣耀
王者荣耀
下载
百度浏览器迷你版
百度浏览器迷你版
下载
2345浏览器手机版
2345浏览器手机版
下载
网易邮箱
网易邮箱
下载
爱奇艺
爱奇艺
下载
网易云音乐
网易云音乐
下载
WPSOffice
WPSOffice
下载
优酷
优酷
下载
谷歌浏览器(Chrome)
谷歌浏览器(Chrome)
下载
迅雷看看播放器
迅雷看看播放器
下载
UC浏览器
UC浏览器
下载
QQ音乐
QQ音乐
下载
阿里旺旺买家版v9.12.10C官方版
阿里旺旺买家版v9.12.10C官方版
下载
360安全卫士v12.1官方版
360安全卫士v12.1官方版
下载
猜你喜欢
糖果庄园家居设计无限星星
糖果庄园家居设计无限星星
下载
消灭果果
消灭果果
下载
小优用车
小优用车
下载
天天瑜伽
天天瑜伽
下载
电饭宝
电饭宝
下载
狐狸和刺藤
狐狸和刺藤
下载
小红书电脑版
小红书电脑版
下载
爱米小说iOS
爱米小说iOS
下载
英雄你太美电脑版
英雄你太美电脑版
下载
寒冰之刃
寒冰之刃
下载
希腊史诗
希腊史诗
下载
特工小K
特工小K
下载
天堂沙滩旗与比基尼
天堂沙滩旗与比基尼
下载
求生之路2有趣味的地图MOD
求生之路2有趣味的地图MOD
下载
友搭顺风车司机端
友搭顺风车司机端
下载
必应每日图片v0.33绿色免费版
必应每日图片v0.33绿色免费版
下载