を検出:Xamarin.Androidは、私がこれを行うことにより、アプリがシミュレータで実行されていることを検知できるiPhone用エミュレータ
var isSumlator = ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR;
Xamarin.Androidでエミュレータを検出するための最良の同等とは何ですか?
を検出:Xamarin.Androidは、私がこれを行うことにより、アプリがシミュレータで実行されていることを検知できるiPhone用エミュレータ
var isSumlator = ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.SIMULATOR;
Xamarin.Androidでエミュレータを検出するための最良の同等とは何ですか?
これは単なるローカルデバッグテスト用にしたり、エンドユーザーの環境でテストするために、あなたのコードでそれを残すことを計画している場合であればのあなたの目標に依存します。
の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エミュレータ検出を
string fing = Build.Fingerprint;
bool isEmulator=false;
if (fing != null) {
isEmulator = fing.Contains("vbox") || fing.Contains("generic") || fing.Contains("vsemu");
}
FYI:たくさんの電話機(中国語ベースおよびCyanogenModベースのビルド)は、指紋に「ジェネリック」を含んでいます。 – SushiHangover