هل سيتم إرجاع Tephonymanger.getDeviceId () معرف الجهاز للأجهزة اللوحية مثل Tab Galaxy ...؟
سؤال
أريد الحصول على معرف الجهاز الذي سيكون فريدًا لكل جهاز Android. أنا أتطور حاليًا لجهاز الكمبيوتر اللوحي. تريد الحصول على معرف الجهاز الفريد وتخزين القيم المقابلة ...
لذلك ، أريد أن أعرف ما إذا كانت أجهزة الكمبيوتر اللوحي ستعود قيمة إذا استخدمت TelephonyManager.getDeviceId () ... ؟؟؟ أم أن هناك أي قيمة أخرى فريدة لكل جهاز ؟؟؟
المحلول
هذا هو ليس سؤال مكرر. كما اتضح ، تتطلب CTS من Google أن GetPhoneType of TelephonyManager يجب أن يكون لا شيء ويحتاج getDeviceid of TelephonyManager إلى أن يكون لاغية للأجهزة غير الهاتفية.
حتى تحصل على imei ، يرجى محاولة استخدام:
String imei = SystemProperties.get("ro.gsm.imei")
لسوء الحظ ، تعد SystemProperties فئة غير عامة في نظام التشغيل Android ، مما يعني أنه ليس متاحًا للجمهور للتطبيقات العادية. حاول النظر في هذا المنشور للمساعدة في الوصول إليه: أين Android.OS.SystemProperties
نصائح أخرى
tephonymanger.getDeviceId () إرجاع معرف الجهاز الفريد ، على سبيل المثال ، IMEI لـ GSM و MEID أو ESN لهواتف CDMA.
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myAndroidDeviceId = mTelephony.getDeviceId();
لكني أوصي باستخدام:
الإعدادات. secure.android_id هذا يعيد معرف Android كسلسلة سداسية فريدة من نوعها 64 بت.
String myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
أحيانا tephonymanger.getDeviceId () سيعود NULL ، لذلك لضمان معرف فريد من نوعه ، ستستخدم هذه الطريقة:
public String getUniqueID(){
String myAndroidDeviceId = "";
TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTelephony.getDeviceId() != null){
myAndroidDeviceId = mTelephony.getDeviceId();
}else{
myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
}
return myAndroidDeviceId;
}
منذ أن تم تغيير Android 8. يجب أن تستخدم Build.getSerial()
, ، للحصول على الرقم التسلسلي للجهاز وإضافة الإذن READ_PHONE_STATE
.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
serial = Build.getSerial(); // Requires permission READ_PHONE_STATE
} else {
serial = Build.SERIAL; // Will return 'unknown' for device >= Build.VERSION_CODES.O
}
واحصل على IMEI أو MEID بهذه الطريقة:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String imei = tm.getImei(); // Requires permission READ_PHONE_STATE
serial = imei == null ? tm.getMeid() : imei; // Requires permission READ_PHONE_STATE
} else {
serial = tm.getDeviceId(); // Requires permission READ_PHONE_STATE
}