在我的应用程序中,我需要获取设备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
值。
怎么了?
我遇到了同样的问题,并按以下步骤解决了它:
在我定义的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)及更高版本上,此字段将返回UNKNOWN,并且必须通过以下方式访问:
Build.getSerial();
这需要危险权限android.permission.READ_PHONE_STATE。