检测Android应用程序是否在“BlueStacks”中运行的可靠方法

我想在运行时确定它是否在Android应用程序中运行,它是否在BlueStacks Android模拟器中运行。这样我就可以修改应用程序在BlueStacks中运行时的运行方式。

BlueStacks不支持多点触控,因此我想实现我当前应用程序具有的标准捏合缩放功能的替代方案。

例如:

If (appIsRunningInBlueStacks){
    mySurfaceView.enableMultiTouchAlternatives();
} else{
    mySurfaceView.enableMultiTouchFeatures();
}

确定 appIsRunningInBlueStacks 价值的可靠方法是什么?

编辑 对问题的评论答案摘要:

本,塔拉斯,谢谢你的建议。BlueStacks 的 Build.MODEL 等值为:

  • 型号: “GT-I9100”

  • 制造商: “三星”

  • 设备: “GT-I9100”

  • 产品: “GT-I9100”

这与三星Galaxy SII的型号相同,因此由于担心使用SI的所有用户与BlueStacks上的SI相同,因此使用它并不理想。

CommonsWare,该应用程序继续在BlueStacks中运行,即使具有<使用功能>用于清单中的多点触控。事实上(也回答了iagreen的问题)...

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);

...返回 true!这是可以预料到的,我想模拟器确信它是三星Galaxy SII!

因此,我们仍然无法可靠地检测应用程序是否在BlueStacks上运行,而不会将所有三星Galaxy SII用户放入同一桶中。还有其他想法吗?


答案 1

您可以检查Bluestacks共享文件夹是否存在/sdcard/windows/BstSharedFolder

    Boolean onBlueStacks()
        {
        File sharedFolder = new File(Environment
                .getExternalStorageDirectory().toString()
                + File.separatorChar
                + "windows"
                + File.separatorChar
                + "BstSharedFolder");

        if (sharedFolder.exists())
            {
            return true;
            }

        return false;
        }

答案 2

我的 BlueStacks 版本将我的报告为 .Build.ModelGT-N7100

使用:我得到.android.opengl.GLES20.glGetString(android.opengl.GLES20.GL_RENDERER)Bluestacks


推荐