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用户放在同一个存储桶中.还有其他想法吗?
您可以检查 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)
以上方法均不适用于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)
| 归档时间: |
|
| 查看次数: |
5172 次 |
| 最近记录: |