热门搜索:软件下载

Android设备ID获取(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编程知识,请关注谢谢

,
软件推荐