Cómo averiguar por código si mi aplicación de Android se ejecuta en bluestack o si se ejecuta en un dispositivo real

Lo más probable es que no exista un método que garantice el resultado correcto.

Una común parece ser:

Build.FINGERPRINT.startsWith("generic")

El uso contains lugar de startsWith en el caso de Android x86. Sin embargo, esto no es lo suficientemente confiable. Los dispositivos Android con ROM personalizada (como Cyanogenmod) pueden devolver falsos positivos.

Entonces, lo que puede hacer es usar un método como el siguiente con múltiples comprobaciones:

importar android.os.Build;
/ *** Métodos de utilidad relacionados con dispositivos físicos y emuladores *** /
DeviceUtil de clase pública {
público estático booleano isEmulator () {
return Build.FINGERPRINT.startsWith (“genérico”)
|| Build.FINGERPRINT.startsWith (“desconocido”)
|| Build.MODEL.contains (“google_sdk”)
|| Build.MODEL.contains (“Emulador”)
|| Build.MODEL.contains (“Android SDK construido para x86”)
|| Build.MANUFACTURER.contains (“Genymotion”)
|| (Build.BRAND.startsWith (“genérico”)
&& Build.DEVICE.startsWith (“genérico”))
|| “google_sdk” .equals (Build.PRODUCT);
}
}

Los emuladores de Android generalmente tienen init.goldfish.rc en su directorio raíz, puede verificar ese archivo o verificar algo similar como a continuación:

isEmulator = Build.HARDWARE.contains("golfdish")

Fuente: Stackoverflow, Github

Esto será único.

No hay dispositivo bluetooth en Bluestack.

Por lo tanto, intente obtener la cadena de dirección Bluetooth que siempre es ‘nula’ en Bluestack o en cualquier emulador. Asegúrese de agregar el permiso Bluetooth en su manifiesto de proyecto.

BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter ();

Cadena m_bluetoothAdd = m_BluetoothAdapter.getAddress ();

Realmente dudo si es posible. Se debe a que Blue Stacks es un emulador similar a su emulador predeterminado que viene con Android Studio. Y actúa como un dispositivo Android. Y tiene casi todas las características, a veces las características relacionadas con la conectividad pueden no estar allí, pero si están presentes, generalmente usa los dispositivos de conectividad de la computadora. Por lo tanto, es realmente difícil encontrar a través de la aplicación si el dispositivo es falso (un emulador) o real. Ya que son casi lo mismo.

Puede haber métodos maliciosos para detectar esto. Pero no estoy seguro ni consciente de ellos.