0

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

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

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

问题是什么?

4

2 回答 2

0

我有同样的问题,并解决如下:

在我定义的 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;

}
于 2019-11-30T21:34:18.437 回答
0

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

Build.Serial;

在 Android 8 (SDK 26) 及更高版本上,此字段将返回UNKNOWN并且必须通过以下方式访问:

Build.getSerial();

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

更多详细信息: Android:如何以编程方式访问 AVD 管理器中显示的设备序列号(API 版本 8)

于 2019-12-02T23:13:39.020 回答