有没有其他方法可以获取不会给我过时警告的 IMEI 号码?

Jud*_*ham 1 obsolete imei xamarin.forms

嗨,我想在我的 Android 设备中获取IMEI 号码而我能够做到。但我收到过时警告说 ' TelephonyManager.DeviceId' is obsolete:'deprecated'。我正在使用此代码在我的 Android 设备中获取 IMEI 号码

Android.Telephony.TelephonyManager mTelephonyMgr;
        mTelephonyMgr = (Android.Telephony.TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService);

        return mTelephonyMgr.DeviceId;
Run Code Online (Sandbox Code Playgroud)

现在我可以通过使用禁用过时的警告

     mTelephonyMgr = (Android.Telephony.TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService);
#pragma warning disable CS0618 // Type or member is obsolete
            return mTelephonyMgr.DeviceId;
#pragma warning restore CS0618 // Type or member is obsolete
Run Code Online (Sandbox Code Playgroud)

但是为什么我会收到这个过时的警告?是否有不同的方法来获取 IMEI 号码,我不会收到这个过时的警告?

EvZ*_*EvZ 7

定义DeviceId

Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available.
Run Code Online (Sandbox Code Playgroud)

什么时候IMEI简单:

IMEI (International Mobile Equipment Identity)
Run Code Online (Sandbox Code Playgroud)

Android 官方文档看来,DeviceIdAPI 级别 26 已弃用,您应该改用GetMeid(int slotIndex)。在这种情况下,我会检查 API 级别,如果它低于 26,我仍然会使用DeviceId其他方法GetMeid(int slotIndex)

像这样的东西:

string GetIMEI()
{
    Android.Telephony.TelephonyManager mTelephonyMgr = (Android.Telephony.TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService);
    if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
        // TODO: Some phones has more than 1 SIM card or may not have a SIM card inserted at all
        return mTelephonyMgr.GetMeid(0);
    else
        #pragma warning disable CS0618 // Type or member is obsolete
        return mTelephonyMgr.DeviceId;
        #pragma warning restore CS0618 // Type or member is obsolete
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意作为我的答案一部分的官方文档的链接。DeviceId 和 GetMeid 明确声明它们需要 READ_PHONE_STATE 权限。 (2认同)