2016-05-17 7 views

答えて

4

これは単なるローカルデバッグテスト用にしたり、エンドユーザーの環境でテストするために、あなたのコードでそれを残すことを計画している場合であればのあなたの目標に依存します。

のAndroidの世界は非常に大きいように、これは我々は野生で見られるものに基づいて、これまでの進化の方法である:

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

更新:複数のプラットフォームに固定されたXAPエミュレータ検出を

2

Source

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

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

FYI:たくさんの電話機(中国語ベースおよびCyanogenModベースのビルド)は、指紋に「ジェネリック」を含んでいます。 – SushiHangover

関連する問題