我正在使用API 14(Android 4.0)开发应用程序。
在清单文件中:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
我希望能够从每个设备获得一个唯一的标识符(或创建一个),即使重新启动设备,该标识符仍然保持相同。但是重要的是,即使是两个相同的设备,该标识符也必须不同。我该怎么做呢?
我正在使用API 14(Android 4.0)开发应用程序。
在清单文件中:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
我希望能够从每个设备获得一个唯一的标识符(或创建一个),即使重新启动设备,该标识符仍然保持相同。但是重要的是,即使是两个相同的设备,该标识符也必须不同。我该怎么做呢?
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
在此,android_id 是每个设备的唯一标识符。 String UniqueDeviceId = AndroidDeviceIdentifier.getUniqueDeviceIdentifier(context);
final class AndroidDeviceIdentifier {
private AndroidDeviceIdentifier() {
// hidden constructor of singleton
}
/**
* Returns a stable identifier for the current device.
*
* @param ctx The application's Context
* @return The unique device identifier
* @throws IllegalStateException If the device's identifier could not be determined
*/
public static String getUniqueDeviceIdentifier(@NonNull final Context ctx) throws IllegalStateException {
try {
return getDeviceUUID(ctx);
} catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
throw new IllegalStateException("Could not determine device identifier", e);
}
}
private static String getDeviceUUID(Context ctx) throws UnsupportedEncodingException, NoSuchAlgorithmException {
byte[] hash = makeHash(getMac(ctx), getSerialNumber(ctx));
return createUUIDFromHash(hash);
}
private static String createUUIDFromHash(byte[] hash) {
return UUID.nameUUIDFromBytes(hash).toString().toLowerCase(); // Server side wants lower cased UUIDs
}
private static byte[] makeHash(final String mac, final String serialNumber) throws UnsupportedEncodingException, NoSuchAlgorithmException {
MessageDigest sha;
sha = MessageDigest.getInstance("SHA-256");
sha.reset();
sha.update(mac.getBytes("UTF-8"));
sha.update(serialNumber.getBytes("UTF-8"));
return sha.digest();
}
private static String getSerialNumber(Context context) {
String serialNumber = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
if (serialNumber == null) {
serialNumber = "0000000000000000";
}
return serialNumber;
}
private static String getMac(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
String mac = wifiManager.getConnectionInfo().getMacAddress();
if (mac == null) {
mac = "000000000000";
}
return mac;
}
final String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
只需将此代码粘贴到您的主活动或任何函数中,即可将生成的ID存储在共享首选项中以供以后使用。