2013-01-03 58 views
11

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

BlueStacks不支持多点触控,所以我想实现一个替代我的当前应用程序的标准缩放功能。

E.g.

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

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

答案编辑总结对问题的评论:

本,塔拉斯,感谢您的建议。对于蓝叠的Build.MODEL等的值是:

  • 型号: “GT-I9100”

  • 厂商: “三星”

  • 装置: “GT-I9100”

  • 产品: “GT-I9100”

这是同一型号NUM作为三星Galaxy SII,所以它不适合使用它,因为它们担心所有使用SII的用户都与BlueStacks上的用户相同。

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

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT); 

...返回true!这是可以预料的,我猜想仿真器确信它是三星Galaxy SII!

因此,我们仍然没有办法可靠地检测到应用程序是否在BlueStacks上运行,而不会将所有Samsung Galaxy SII用户都扔在同一个存储桶中。任何其他想法?

+1

你有没有试过通过'android.os.Build'偷窥? (http://developer.android.com/reference/android/os/Build.html) –

+0

是的,尝试在运行时检查android.os.Build MODEL,MANUFACTURER,DEVICE,PRODUCT常量并检查它们的值,而不是简单地检查一个最适合的参数,并且在运行时是唯一的。 –

+1

您是否有正确的''元素来宣传您需要多点触控?或者BlueStacks忽略了这一点? – CommonsWare

回答

-1

我也在寻找一个解决方案,我在搜索的时候在一些中文博客上发现了这个代码片段,我不知道它在做什么,但也许别人可以?

public boolean isEmulator() { 
     String android_id = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 
     Log.d("ares","ANDROID_ID: "+android_id); 
     Log.d("ares","Build.PRODUCT: "+Build.PRODUCT); 
     boolean emulator = TextUtils.isEmpty(android_id) || "google_sdk".equals(Build.PRODUCT) || "sdk".equals(Build.PRODUCT);    
     return emulator; 
    } 

请忽略如果完全没有帮助...

+0

另外我看到这篇文章已经快一岁了。你找到解决方案吗? – law

2

我的版本蓝叠的是报告我Build.Model作为GT-N7100

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

3

您可以检查出蓝叠共享文件夹中存在 /SD卡/窗/ BstSharedFolder

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

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

     return false; 
     } 
0

这将是独一无二的。

Bluestack中没有蓝牙设备。

因此,请尝试获取Bluestack或任何仿真器上始终为“空”的蓝牙地址字符串。确保您在项目清单中添加了蓝牙许可。

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); 
相关问题