3

在我的 Android 应用程序中,我必须使用加速度计和其他传感器。由于这个传感器不是由虚拟设备模拟的,我必须使用 SensorSimulator 项目。问题是 SensorSimulator 的 API 看起来与 Android 的不同。因此,如果我在真实设备或虚拟设备中,我必须使用不同的代码。它是否存在以编程方式检测它的方法?或者您知道其他解决方案吗?

4

4 回答 4

7

您可以尝试,通过检查Build.DEVICE哪个不是真实设备应该读取generic或检查Build.PRODUCT哪个是sdk.

于 2012-11-23T08:29:49.973 回答
7

对于模拟器,以下是正确的......

Build.FINGERPRINT.startsWith("generic")

或者

boolean inEmulator = "generic".equals(Build.BRAND.toLowerCase());
于 2012-11-23T08:25:21.430 回答
1

有很多方法可以实现这个目标,例如:(1)cat /proc/cpuinfo,模拟器包含“goldfish”,真实设备包含“Qualcomm MSM xxxx”等。(2) 下列特征表明它是一个模拟器:

private static String[] known_pipes={
        "/dev/socket/qemud",
        "/dev/qemu_pipe"
};

private static String[] known_qemu_drivers = {
        "goldfish"
};

private static String[] known_files = {
        "/system/lib/libc_malloc_debug_qemu.so",
        "/sys/qemu_trace",
        "/system/bin/qemu-props"
};

private static String[] known_numbers = { "15555215554", "15555215556",
        "15555215558", "15555215560", "15555215562", "15555215564",
        "15555215566", "15555215568", "15555215570", "15555215572",
        "15555215574", "15555215576", "15555215578", "15555215580",
        "15555215582", "15555215584", };

private static String[] known_device_ids = { 
        "000000000000000"// default ID on emulator
};

有关更多信息,请参阅论文“Morpheus:自动生成启发式方法以检测 Android 模拟器”。

于 2017-03-02T07:08:43.127 回答
1

我知道这是一个老问题,但也遇到了同样的问题。我修改了 Nermeen 的答案,因为它不再起作用了:

boolean inEmulator = Build.FINGERPRINT.contains("generic");
于 2016-10-21T10:35:38.330 回答