public class UniqueIDUtils {
private static final String TAG = "UniqueIDUtils";
private static String uniqueID;
private static String uniqueKey = "unique_id";
private static String uniqueIDDirPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath();
private static String uniqueIDFile = "unique.txt";
public static String getUniqueID(Context context) {
//三步讀?。簝?nèi)存中,存儲(chǔ)的SP表中,外部存儲(chǔ)文件中
if (!TextUtils.isEmpty(uniqueID)) {
Log.e(TAG, "getUniqueID: 內(nèi)存中獲取" + uniqueID);
return uniqueID;
}
uniqueID = PreferenceManager.getDefaultSharedPreferences(context).getString(uniqueKey, "");
if (!TextUtils.isEmpty(uniqueID)) {
Log.e(TAG, "getUniqueID: SP中獲取" + uniqueID);
return uniqueID;
}
readUniqueFile(context);
if (!TextUtils.isEmpty(uniqueID)) {
Log.e(TAG, "getUniqueID: 外部存儲(chǔ)中獲取" + uniqueID);
return uniqueID;
}
//兩步創(chuàng)建:硬件獲?。蛔孕猩膳c存儲(chǔ)
getDeviceID(context);
getAndroidID(context);
getSNID();
createUniqueID(context);
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(uniqueKey, uniqueID);
return uniqueID;
}
@SuppressLint("MissingPermission")
private static void getDeviceID(Context context) {
if (!TextUtils.isEmpty(uniqueID)) {
return;
}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {
return;
}
String deviceId = null;
try {
deviceId = ((TelephonyManager) context.getSystemService(TELEPHONY_SERVICE)).getDeviceId();
if (TextUtils.isEmpty(deviceId)) {
return;
}
} catch (Exception e) {
e.printStackTrace();
return;
}
uniqueID = deviceId;
Log.e(TAG, "getUniqueID: DeviceId獲取成功" + uniqueID);
}
private static void getAndroidID(Context context) {
if (!TextUtils.isEmpty(uniqueID)) {
return;
}
String androidID = null;
try {
androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
if (TextUtils.isEmpty(androidID) || "9774d56d682e549c".equals(androidID)) {
return;
}
} catch (Exception e) {
e.printStackTrace();
return;
}
uniqueID = androidID;
Log.e(TAG, "getUniqueID: AndroidID獲取成功" + uniqueID);
}
private static void getSNID() {
if (!TextUtils.isEmpty(uniqueID)) {
return;
}
String snID = Build.SERIAL;
if (TextUtils.isEmpty(snID)) {
return;
}
uniqueID = snID;
Log.e(TAG, "getUniqueID: SNID獲取成功" + uniqueID);
}
private static void createUniqueID(Context context) {
if (!TextUtils.isEmpty(uniqueID)) {
return;
}
uniqueID = UUID.randomUUID().toString();
Log.e(TAG, "getUniqueID: UUID生成成功" + uniqueID);
File filesDir = new File(uniqueIDDirPath + File.separator + context.getApplicationContext().getPackageName());
if (!filesDir.exists()) {
filesDir.mkdir();
}
File file = new File(filesDir, uniqueIDFile);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
outputStream.write(uniqueID.getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static void readUniqueFile(Context context) {
File filesDir = new File(uniqueIDDirPath + File.separator + context.getApplicationContext().getPackageName());
File file = new File(filesDir, uniqueIDFile);
if (file.exists()) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
inputStream.read(bytes);
uniqueID = new String(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public static void clearUniqueFile(Context context) {
File filesDir = new File(uniqueIDDirPath + File.separator + context.getApplicationContext().getPackageName());
deleteFile(filesDir);
}
private static void deleteFile(File file) {
if (file.isDirectory()) {
for (File listFile : file.listFiles()) {
deleteFile(listFile);
}
} else {
file.delete();
}
}
}
Android獲取唯一UUID
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- UDID 全名:Unique Device Identifie(設(shè)備唯一標(biāo)識(shí)符) 說明:UDID,即設(shè)備唯一標(biāo)識(shí)符...
- 概述 已禁用[UIDevice uniqueIdentifier]獲取設(shè)備唯一標(biāo)識(shí),還有一種生成iOS設(shè)備唯一標(biāo)示...
- 1.新建一個(gè)工程,看一下自己的Bundle Id.這個(gè)Bundle Id 要和你用真機(jī)測(cè)試時(shí)的證書上面的Bundl...
- 在開發(fā)過程中,我們經(jīng)常會(huì)被要求獲取每個(gè)設(shè)備的唯一標(biāo)示,以便后臺(tái)做相應(yīng)的處理。我們來看看有哪些方法來獲取設(shè)備的唯一標(biāo)...