c# - 检测游戏是否在安卓模拟器中运行

标签 c# android unity3d emulation virtual

有什么方法可以知道游戏是在模拟器应用程序中运行还是在真实设备中运行?

VirtualXposed 等一些应用程序是 Android 设备的虚拟模拟器。此类应用程序允许用户使用不同的标识在其设备上多次安装游戏/应用程序。

我想知道有什么方法可以识别我的游戏/应用程序是在模拟器中运行还是在 unity3d 中的物理设备中运行?

类似的东西:

if(isemulator)
   {
       dosomething();
   }

最佳答案

这并不容易,因为那里有很多模拟器。 this的答案post 说你可以使用 Build.FINGERPRINT.contains("generic") 来做到这一点。

您可以使用 AndroidJavaClass 类将 Java 代码移植到 Unity 中的 C#,而无需构建 Java 插件。下面是 C# 中的移植版本:

public bool IsEmulator()
{
    AndroidJavaClass osBuild;
    osBuild = new AndroidJavaClass("android.os.Build");
    string fingerPrint = osBuild.GetStatic<string>("FINGERPRINT");
    return fingerPrint.Contains("generic");
}

为确保这涵盖大多数模拟器,请使用 android-emulator-detector插入。这个插件似乎经过了严格的测试,可以检测到大多数模拟器。您可以使用 AndroidJavaClass 与其通信,并使用 UnityPlayer.UnitySendMessage 在 C# 中对您的 Unity 代码进行回调。

关于c# - 检测游戏是否在安卓模拟器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880866/

相关文章:

c# - 如何检查字符串是否是命名空间

c# - 将 java 项目转换为 .Net 后如何访问 System.getProperties()

C# Crystal 报表参数超出范围异常

android - 将 SignalR.Client Nuget 包添加到 Monogame Android 项目时出现问题

c# - 空合并运算符赋值给自己

c# - 仅在一个 Boss 死亡后生成 Boss 敌人

c# - 发布有效数据后从 C# 下载文件

java - ClassCastException - 从对话框 fragment 的适配器类获取 Activity 的 View 引用

android - Jenkins 提供的 SDK 目录不存在

opencv - 如何计算新的相机在3d空间中的位置和旋转,以在移动3d对象后获得完全相同的 View ?