2013-01-03 1 views
11

Я хотел бы узнать во время выполнения внутри приложения Android, работает ли он в эмуляторе Android BlueStacks. Это значит, что я могу изменить способ работы приложения при работе внутри BlueStacks.Надежный способ определить, работает ли приложение Android в «BlueStacks»

BlueStacks не поддерживает multi-touch, поэтому я хочу реализовать альтернативу стандартным функциям pinch-to-zoom, которые есть в моем текущем приложении.

E.g.

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

Что такое надежный способ определения ценности appIsRunningInBlueStacks?

EDIT Резюме ответов на замечания по вопросу:

Бен, Тарас, спасибо за предложения. Эти значения и т.д. Build.MODEL для BlueStacks являются:

  • Модель: "GT-I9100"

  • Производитель: "Samsung"

  • Прибор: "GT-I9100"

  • продукта: "GT-I9100"

Это та же модель Num как Samsung Galaxy SII, поэтому было бы нецелесообразно использовать это, опасаясь, что все пользователи будут использовать SII так же, как и на BlueStacks.

CommonsWare приложение продолжает работать в BlueStacks даже с использованием функции-< для мультитач в манифесте. Фактически (также отвечая на вопрос iagreen) ...

packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT); 

... возвращает true! Этого следует ожидать, я полагаю, поскольку эмулятор убежден, что это Samsung 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

Моя версия BlueStacks сообщает мой Build.Model в GT-N7100.

Использование: android.opengl.GLES20.glGetString(android.opengl.GLES20.GL_RENDERER) Я получаю Bluestacks.

3

Вы можете проверить, что Bluestacks общей папки существует /SDCard/окна/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 нет устройства Bluetooth.

Итак, попробуйте получить строку адреса Bluetooth, которая всегда «пустая» на Bluestack или любом эмуляторе. Убедитесь, что вы добавили разрешение Bluetooth в манифест проекта.

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); 
Смежные вопросы