无法在 Xamarin Forms 中获取 android 版本 9.0 的设备 ID(API 级别 28 - 饼图)

Can't get device id in Xamarin Froms for android version 9.0 (API Level 28 - Pie)

在我的应用程序中,我需要获取设备 ID。我使用以下内容:

var DeviceId=Resolver.Resolve<IDevice>().Id;

当我将 Target Android version 设置为 Android 8.0(API 26 级 - 奥利奥)或更低版本时,一切正常。但是,当我想更新我的应用程序时,Google Play 规定 Target Android version 必须是 Android 9.0(API 级别 28 - Pie)。因此,当我更改 Target Android version 时,我得到设备 ID 的 unknown 值。

有什么问题?

我遇到了同样的问题,解决方法如下:

在我的 MainActivity.cs 文件中我定义了

public static ContentResolver myContentResolver;

并在 OnCreate 方法中设置它的值

protected override void OnCreate(Bundle bundle)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;
    base.OnCreate(bundle);

    global::Xamarin.Forms.Forms.Init(this, bundle);
    LoadApplication(new App());

    // Getting ContentResolver instance
    myContentResolver = this.ContentResolver;
}

然后是我的 GetDeviceId

public String GetDeviceId()
{

    String deviceID = Android.OS.Build.Serial?.ToString();

    if (String.IsNullOrEmpty(deviceID) || deviceID.ToUpper() == "UNKNOWN") // Android 9 returns "Unknown"
    {

        ContentResolver myContentResolver = MyApp.Droid.MainActivity.myContentResolver;

        deviceID = Android.Provider.Settings.Secure.GetString(myContentResolver, Android.Provider.Settings.Secure.AndroidId);

    }


    return deviceID;

}

似乎XLabs.Forms使用以下代码获取Id(对于Android):

Build.Serial;

在 Android 8 (SDK 26) 及更高版本中,此字段将 return 未知 并且必须通过以下方式访问:

Build.getSerial();

需要危险权限android.permission.READ_PHONE_STATE。

更多详情: Android: How to programmatically access the device serial number shown in the AVD manager (API Version 8)