如何仅在设备上运行Android应用 。
当应用开始检查它是否在设备或模拟器上启动。如果它是模拟器想要app停止。
我该怎么做......
答案 0 :(得分:3)
在启动活动的onCreate()
方法中,您可以检查设备是否在模拟器上运行,如果是,则只需调用finish()
。要检查您是否在模拟器上运行,可以使用以下代码(取自this answer):
public static boolean isEmulator() {
return Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")
|| Build.MANUFACTURER.contains("Genymotion")
|| (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
|| "google_sdk".equals(Build.PRODUCT);
}
您可以在网上找到许多其他建议来检测模拟器环境。我不知道任何绝对万无一失的,但上面的内容非常强大。
答案 1 :(得分:1)
您可以尝试以下操作
boolean isEmulator() {
return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
|| Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.HARDWARE.contains("goldfish")
|| Build.HARDWARE.contains("ranchu")
|| Build.HARDWARE.equals("vbox86")
|| Build.HARDWARE.toLowerCase().contains("nox")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")
|| Build.MODEL.toLowerCase().contains("droid4x")
|| Build.MANUFACTURER.contains("Genymotion")
|| Build.PRODUCT.contains("sdk_google")
|| Build.PRODUCT.contains("google_sdk")
|| Build.PRODUCT.contains("sdk")
|| Build.PRODUCT.contains("sdk_x86")
|| Build.PRODUCT.contains("vbox86p")
|| Build.PRODUCT.contains("emulator")
|| Build.PRODUCT.contains("simulator")
|| Build.PRODUCT.toLowerCase().contains("nox")
|| Build.BOARD.toLowerCase().contains("nox")
|| Build.BOOTLOADER.toLowerCase().contains("nox")
|| Build.SERIAL.toLowerCase().contains("nox");
}
这是 Flutter 项目(设备信息插件)中使用的代码的更新。检查它here