简介
获取设备唯一标识的方法。
环境
引用库的github地址:Android_CN_OAID
在Android最外层的bundel.gradle里添加下面依赖
allprojects {
repositories {
'''
maven { url 'https://www.jitpack.io' }
...
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在app或者library的bundel.gradle添加下面依赖
dependencies {
implementation 'com.github.gzu-liyujiang:Android_CN_OAID:<version>'
}
- 1
- 2
- 3
代码
引用的库的初始化
在Application或者Active的onCreate里添加下面代码:
@Override
public void onCreate() {
super.onCreate();
if (privacyPolicyAgreed) {
...
DeviceIdentifier.register(<Application>);
...
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
调用
需要的变量:
//设备唯一标识
private static String deviceId;
//设备唯一标识文件名字
private static String deviceIdFileName = "all_in_sdk";
//设备唯一标识缓存关键字key
private static String deviceIdKey = "DeviceId";
//设备唯一标识正则
private static final Pattern ANDROID_ID_PATTERN = Pattern.compile("^[0-9a-fA-F]{16}$");
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
获取的方法:
//获取设备的唯一标识
public static String GetDeviceID() {
if(m_Activity == null){
m_Activity = UnityPlayer.currentActivity;
}
Application application = m_Activity.getApplication();
if (application == null)
return "";
if (deviceId != null)
return deviceId;
deviceId = getSPValue((Context)application, deviceIdKey);
if (!TextUtils.isEmpty(deviceId))
return deviceId;
deviceId = getAndroidIdAsDeviceId((Context)application);
if (!TextUtils.isEmpty(deviceId)) {
saveSPValue((Context)application, deviceIdKey, deviceId);
return deviceId;
}
deviceId = generateSoftDeviceId();
if (!TextUtils.isEmpty(deviceId)) {
saveSPValue((Context)application, deviceIdKey, deviceId);
return deviceId;
}
return deviceId;
}
private static String getSPValue(Context paramContext, String paramString) {
SharedPreferences sharedPreferences = paramContext.getSharedPreferences(deviceIdFileName, 0);
return sharedPreferences.getString(paramString, null);
}
private static String getAndroidIdAsDeviceId(Context paramContext) {
String str;
if(DeviceID.supportedOAID(m_Activity))
{
str = DeviceIdentifier.getOAID(m_Activity);
if (isLegalAndroidId(str, true))
return str;
}
str = DeviceIdentifier.getAndroidID(m_Activity);
if (isLegalAndroidId(str, true))
return str;
str = DeviceIdentifier.getIMEI(m_Activity);
if (isLegalAndroidId(str, true))
return str;
str = DeviceIdentifier.getWidevineID();
if (isLegalAndroidId(str, true))
return str;
str = DeviceIdentifier.getPseudoID();
if (isLegalAndroidId(str, true))
return str;
str = DeviceIdentifier.getGUID(m_Activity);
if (isLegalAndroidId(str, true))
return str;
return null;
}
private static String generateSoftDeviceId() {
String str1 = Build.SERIAL;
String str2 = !TextUtils.isEmpty(str1) ? str1 : "NA";
try {
long l1 = 1152921504606846976L;
long l2 = randomLong(Long.MAX_VALUE - l1) + l1;
return String.format("%1$s_%2$s", new Object[] { Long.toHexString(l2), str2 });
} catch (Throwable throwable) {
return String.format("%1$s_%2$s", new Object[] { "NA" + Long.toHexString(System.currentTimeMillis()), str2 });
}
}
private static void saveSPValue(Context paramContext, String paramString1, String paramString2) {
SharedPreferences sharedPreferences = paramContext.getSharedPreferences(deviceIdFileName, 0);
sharedPreferences.edit().putString(paramString1, paramString2).apply();
}
private static long randomLong(long paramLong) {
if (Build.VERSION.SDK_INT >= 21)
return ThreadLocalRandom.current().nextLong(paramLong);
return (long)((new Random()).nextDouble() * (paramLong - 1L));
}
private static boolean isLegalAndroidId(String paramString, boolean paramBoolean) {
if (paramBoolean)
return (!TextUtils.isEmpty(paramString) && ANDROID_ID_PATTERN
.matcher(paramString).find());
return (!TextUtils.isEmpty(paramString) && ANDROID_ID_PATTERN
.matcher(paramString).find());
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 841774407@qq.com