TelephonyManager. getDeviceId ()
是否会返回不同的ID如果用户将设置中的移动网络从GSM
更改为CDMA
,WCDMA
(反之亦然,从CDMA更改为GSM)?
当移动设备中的网络设置设置为TelephonyManager. getDeviceId ()
时,IMEI
会返回GSM
个ID,当设置更改为MEID or ESN
时,会CDMA
ID
因此getDeviceId()
的返回值可能会根据设备设置而改变,不能用于唯一标识设备!
答案 0 :(得分:0)
使用此选项可在所有设备上获取唯一ID。平板电脑上的TelephonyManager失败并返回null,因此您必须将该结果与其他内容相结合,就像我一样。
public static String getDeviceID(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());
return deviceUuid.toString();
}
请注意,您需要将此权限添加到AndroidManifest
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
答案 1 :(得分:0)
我不知道为什么(特别是)你使用了一个唯一的ID,但在我的情况下,我用它来识别一个独特的应用程序安装&#34;。因此,它不依赖于simCards,电话管理器等。
我所做的是创建一个唯一的id(当它尚未创建时)并将其存储在sharedprefs中:
private static String uniqueID = null;
public static String getDeviceUniqueID(Context context)
{
if (uniqueID == null)
{
final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
SharedPreferences sharedPrefs = context.getSharedPreferences(PREF_UNIQUE_ID, Context.MODE_PRIVATE);
uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
if (uniqueID == null)
{
uniqueID = UUID.randomUUID().toString();
Editor editor = sharedPrefs.edit();
editor.putString(PREF_UNIQUE_ID, uniqueID);
editor.commit();
}
}
return uniqueID;
}
<强>注意事项:强>
但是,正如我上面所说:&#34;不知道你为什么要使用它&#34;。
这种方式对我来说就像是一种魅力。也许它也适合你。欢呼声。