Android 获取设备唯一ID、设备信息及当前系统时间
import android.annotation.SuppressLint;
import android.os.Build;
import java.util.UUID;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DevicesId {
/**
* 获取相同设备的唯一ID。
* @return
*/
@SuppressLint("MissingPermission")
public static String getUUID() {
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
Build.USER.length() % 10; //13 位
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
serial = android.os.Build.getSerial();
} else {
serial = Build.SERIAL;
}
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
//使用硬件信息拼凑出来的15位号码
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}
/**
* 获取手机信息
* 手机厂商 品牌 型号 手机版本
* @return
*/
public static String devices_info() {
String devices_info= Build.MANUFACTURER + " " + Build.BRAND + " " + Build.MODEL + " Android" + Build.VERSION.RELEASE;
return devices_info;
}
/**
* 获取当前的时间
* @return
*/
public static String getTime() {
Date date = new Date();// 创建一个时间对象,获取到当前的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置时间显示格式
String CurrentTime = sdf.format(date);
return CurrentTime;
}
}
任意位置获取调用方式
String uuid = "设备ID:"+Utils.getUUID();
System.out.println(uuid);
//获取到的设备ID结果:00000000-7612-3b92-0000-000012e8d9a8
String time ="当前时间:"+ Utils.getTime();
System.out.println(time);
//获取到的当前时间结果:2021-01-23 13:32:23
String time ="当前时间:"+ Utils.devices_info();
System.out.println(time);
//获取到的当前设备信息:HUAWEI HONOR YAL_AL00 Android10
虽然由于唯一标识符权限的更改会导致android.os.Build.getSerial()返回unknown,但是由于m_szDevIDShort是由硬件信息拼出来的,所以仍然保证了UUID的唯一性和持久性。
经测试上述方法完全相同的手机有可能重复,网上还有其他方案比如androidID,但是androidID可能由于机型原因返回null,所以个人任务两种方法半斤八两。设备ID的获取一个版本比一个版本艰难,如果有好的方法欢迎指出。
minSDK警告
在 Android Q 中,当用户首次运行以 Android 6.0(API 级别 23)以下的版本为目标平台的任何应用时,Android平台会向用户发出警告。
如果此应用要求用户授予权限,则系统会先向用户提供调整应用权限的机会,然后才会允许此应用首次运行。
谷歌要求运行在Q设备上的应用targetSDK>=23,不然会向用户发出警告。