是否有可能以编程方式检测是真实的还是虚拟的Android设备?

时间:2012-11-23 08:21:35

标签: android android-emulator

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

4 个答案:

答案 0 :(得分:7)

您可以尝试检查Build.DEVICE哪些不是真实设备应阅读generic或检查Build.PRODUCT哪个是sdk

答案 1 :(得分:6)

以下情况适用于模拟器...

Build.FINGERPRINT.startsWith("generic")

boolean inEmulator = "generic".equals(Build.BRAND.toLowerCase());

答案 2 :(得分:0)

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

boolean inEmulator = Build.FINGERPRINT.contains("generic");

答案 3 :(得分:0)

有很多方法可以实现这一目标,例如: (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模拟器”以获取更多信息。