2016-05-17 8 views
5

für iPhone Detect ich erkennen kann, dass die App in einem Simulator ausgeführt wird, indem Sie diese:Xamarin.Android Emulator

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

Was zur Erfassung des Emulators in Xamarin.Android die besten entspricht?

Antwort

4

Es hängt von Ihrem Ziel, wenn dies nur für die lokalen Debug-Test ist oder wenn Sie planen, es für die Prüfung innerhalb einer End-User-Umgebung in Ihrem Code zu verlassen.

Da die Welt von Android recht groß ist, ist dies ein sich immer weiter entwickelnden Methode basiert auf dem, was wir im wilden gesehen:

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; 
} 

Aktualisiert: Fest XAP-Emulator Erkennung auf mehreren Plattformen

2

Source

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

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

FYI: Viele Telefone (chinesische und CyanogenMod-basierte Builds) enthalten "generische" in ihrem Fingerabdruck. – SushiHangover

Verwandte Themen