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

问题描述 投票:0回答:2

在我的应用程序中,我需要获取设备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)。因此,当我更改Target Android version时,将获得设备ID的unknown值。

怎么了?

c# android xamarin.forms android-9.0-pie deviceid
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;

}

0
投票

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

Build.Serial;

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

Build.getSerial();

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

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

© www.soinside.com 2019 - 2024. All rights reserved.