2013-01-03 81 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(); 
相關問題