2016-05-17 9 views
5

Na iPhone można wykryć, że aplikacja jest uruchomiona w symulatorze w ten sposób:Xamarin.Android Detect Emulator

var isSumlator = ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR; 

Jaki jest najlepszy równoważne do wykrywania emulatora w Xamarin.Android?

Odpowiedz

4

To zależy od Twojego celu, jeśli jest to tylko dla lokalnego testowania debugowania lub jeśli masz zamiar zostawić go w kodzie do testowania w środowisku użytkownika końcowego.

Jak świat Androida jest dość duży, jest nieustannie zmieniającego metoda opiera się na tym, co my widziany w dzikiej:

public bool isEmulator(bool LicensedPlayers = false) 
{ 
    var detect = 0; 
    try 
    { 
     var teleManager = (TelephonyManager)GetSystemService(TelephonyService); 
     string networkOperator = ""; 
     try 
     { 
      networkOperator = teleManager.NetworkOperator; 
      if (LicensedPlayers) 
      { 
       if ((teleManager.NetworkOperatorName == "T-Mobile") && 
        (Build.Radio == "unknown") && 
        (Build.Serial == "unknown") && 
        (Build.Manufacturer == "samsung")) 
       { 
        D.WriteLine("BlueStacks (OS-X) Player"); 
        detect += 1; 
       } 
      } 
     } 
     catch 
     { 
      networkOperator = ""; 
      D.WriteLine("TelephonyService Exceptiion, custom emulator"); 
      detect += 1; 
     } 
     if (networkOperator.Contains("Android")) 
     { 
      D.WriteLine("Google's Android Emulator"); 
      detect += 1; 
     } 
    } 
    catch 
    { 
     D.WriteLine("TelephonyService not available, custom emulator"); 
     detect += 1; 
    } 
    if (LicensedPlayers) 
    { 
     if (Build.Display.Contains("andy") || (Build.Hardware.Contains("andy"))) 
     { 
      D.WriteLine("Andy Player"); 
      detect += 1; 
     } 
    } 
    if (Build.Hardware.Contains("goldfish")) 
    { 
     D.WriteLine("Goldfish-based Emulator"); 
     detect += 1; 
    } 
    if (Build.Display.ToLowerInvariant().Contains("xamarin")) 
    { 
     D.WriteLine("Xamarin Android Player"); 
     detect += 1; 
    } 
    if (Build.Hardware.Contains("vsemu")) 
    { 
     D.WriteLine("Visual Studio Android Emulator"); 
     detect += 1; 
    } 
    if (Build.Host.Contains("genymobile") || (Build.Manufacturer.ToLowerInvariant().Contains("genymotion"))) 
    { 
     D.WriteLine("Genymotion Android Emulator"); 
     detect += 1; 
    } 
    if (Build.Hardware.Contains("vbox") && Build.Hardware.Contains("86")) 
    { 
     D.WriteLine("VirtualBox-based Emulator"); 
     detect += 1; 
    } 
    return detect > 0; 
} 

Aktualizacja: Naprawiono XAP wykrywanie emulator na wielu platformach

2

Source

string fing = Build.Fingerprint; 
bool isEmulator=false; 

if (fing != null) { 
    isEmulator = fing.Contains("vbox") || fing.Contains("generic") || fing.Contains("vsemu"); 
} 
+2

FYI: Wiele telefonów (kompilacje oparte na chinach i CyanogenMod) zawierają "rodzajowy" w ich odciskach palców. – SushiHangover