繁体   English   中英

Xamarin.Android 检测模拟器

[英]Xamarin.Android Detect Emulator

对于 iPhone,我可以通过执行以下操作检测应用程序正在模拟器中运行:

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

在 Xamarin.Android 中检测模拟器的最佳等价物是什么?

using Xamarin.Essentials;

var isSimulator = DeviceInfo.DeviceType == DeviceType.Virtual;

这取决于您的目标是仅用于本地调试测试,还是计划将其保留在代码中以在最终用户环境中进行测试。

由于 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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM