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

Twi*_*led 15 java android emulation android-emulator bluestacks

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

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

例如

If (appIsRunningInBlueStacks){
    mySurfaceView.enableMultiTouchAlternatives();
} else{
    mySurfaceView.enableMultiTouchFeatures();
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ben,Taras,感谢您的建议.BlueStacks的Build.MODEL等值是:

  • 型号:"GT-I9100"

  • 制造商:"samsung"

  • 装置:"GT-I9100"

  • 产品:"GT-I9100"

这是与三星Galaxy SII相同的型号,所以使用它不是理想的,因为担心使用与BlueStacks相同的SII处理所有用户.

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

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT);
Run Code Online (Sandbox Code Playgroud)

......回归真实!我想这是可以预料的,因为模拟器确信它是三星Galaxy SII!

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

Reg*_*ais 5

您可以检查 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;
        }
Run Code Online (Sandbox Code Playgroud)


Wei*_*ang 5

以上方法均不适用于BlueStacks 5。正确的做法是检查路径是否/mnt/windows/BstSharedFolder存在。它在 BlueStacks 4 和 5 上都运行良好。

   fun checkFilesExist(files: Array<String>): Boolean {
        files.forEach {
            val file = File(it)
            if (file.exists()) {
                return true
            }
        }
        return false
    }
    
    fun isBlueStacks(): Boolean {
        val BLUE_STACKS_FILES = arrayOf(
            "/mnt/windows/BstSharedFolder"
        )
        return checkFilesExist(BLUE_STACKS_FILES)
    }

Run Code Online (Sandbox Code Playgroud)