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