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