Tidak bisa mendapatkan id perangkat di Xamarin Froms untuk Android versi 9.0 (API Level 28 - Pie)

Dalam aplikasi saya, saya perlu mendapatkan Id perangkat. Saya menggunakan yang berikut ini:

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

Semuanya normal ketika saya menyetel Target Android version ke Android 8.0 (API level 26 - Oreo) atau versi yang lebih rendah. Namun, Saat saya ingin mengupdate aplikasi saya, Google Play menetapkan bahwa Target Android version harus Android 9.0 (API level 28 - Pie). Jadi ketika saya mengubah Target Android version saya mendapatkan nilai unknown untuk Id perangkat.

Apa masalahnya?


person Ahmed Shamel    schedule 28.11.2019    source sumber
comment
Bisakah Anda membagikan kode di mana Anda mendapatkan id perangkat ini? Pada dasarnya kode yang disuntikkan secara asli   -  person FreakyAli    schedule 28.11.2019
comment
Anda dapat menggunakan kode di bawah ini untuk mendapatkan ID perangkat. Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId); Jika Anda ingin mengetahui apa yang salah dengan kode Anda, silakan bagikan kode lainnya untuk kami uji.   -  person Wendy Zang - MSFT    schedule 29.11.2019


Jawaban (2)


Saya mempunyai masalah yang sama, dan menyelesaikannya sebagai berikut:

Dalam file MainActivity.cs saya yang saya tentukan

public static ContentResolver myContentResolver;

dan tetapkan nilainya dalam metode 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;
}

Dan kemudian GetDeviceId saya

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;

}
person Deczaloth    schedule 30.11.2019
comment
Terima kasih, tapi saya ingin ID perangkat keras (nomor seri perangkat keras). - person Ahmed Shamel; 03.12.2019

Tampaknya XLabs.Forms menggunakan kode berikut untuk mendapatkan Id (untuk Android):

Build.Serial;

Pada Android 8 (SDK 26) dan yang lebih baru, kolom ini akan mengembalikan UNKNOWN dan harus diakses dengan:

Build.getSerial();

yang memerlukan izin berbahaya android.permission.READ_PHONE_STATE.

Detail lebih lanjut: Android: Cara mengakses nomor seri perangkat secara terprogram yang ditampilkan di manajer AVD (API Versi 8)

person Ahmed Shamel    schedule 02.12.2019