我正在使用api 14(android 4.0)开发一个应用程序。
清单中的:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
我希望从每个设备(或创建一个)获得一个唯一ID,即使在重启设备后也可能相同。但重要的是,即使对于2个相同的设备,id也是不同的。我怎么能这样做?
答案 0 :(得分:3)
您可以将设备的IMEI号码用作唯一ID。
您想致电android.telephony.TelephonyManager.getDeviceId()。
这将返回唯一标识设备的字符串(GSM上的IMEI,CDMA的MEID)。
您需要在AndroidManifest.xml中获得以下权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
答案 1 :(得分:1)
您可以使用GCM生成不同的设备令牌.... 即使您要卸载并再次安装应用程序或出厂设置,此设备令牌仍将保持相同...您必须遵循一些步骤...... 在Google Developers Console中创建一个新项目。 在此步骤中,为简单起见,您只需要记下2个值:项目编号,它将在客户端项目中用作SENDER_ID;和API服务器密钥(在Credentials上创建),它将在服务器项目中用作API_KEY。 为服务器端创建一个新的简单Android项目(基本源代码作为我在以下链接中的答案)。
为客户端创建一个新的简单Android项目(基本源代码作为我在以下链接中的答案,我是根据Google Cloud Messaging的原始来源定制的 - GitHub)。
运行客户端应用程序,您将获得注册令牌(表示您的设备已成功注册)。然后,将此令牌粘贴(硬编码)到服务器应用程序中的CLIENT_REGISTRATION_TOKEN变量(或编写代码以将此令牌发送到服务器应用程序)。 您可以在以下问题中阅读更多内容,其中之一是您之前阅读过的一个问题:
如何使用Android Studio实现适用于Android的GCM Hello World 为Android添加Google Cloud Messagin(GCM) - 注册流程
答案 2 :(得分:1)
试试这个String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
这里android_id是每个设备的唯一ID。
答案 3 :(得分:1)
试试此代码
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;
}
您将获得唯一的设备ID。如果你有任何问题,请告诉我
答案 4 :(得分:0)
在下面尝试此代码,该设备ID是恒定的,即使您卸载应用程序并重新安装此ID也将保持恒定,并且您也可以使用它从数据库中检索用户数据。
final String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
只需将此代码粘贴到您的主要活动或任何函数中,即可存储在共享首选项中生成的ID供以后使用。