2012-11-23 37 views
2

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

+0

请参阅http://code.google.com/p/openintents/wiki/SensorSimulator – njzk2

回答

6

下面是一个模拟器真的......

Build.FINGERPRINT.startsWith("generic") 

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

您可以尝试,通过检查Build.DEVICE这对于不是真正的设备将读取generic或检查Build.PRODUCT这将是sdk

+0

您已经完成了我的一天:) – hrules6872

+0

Build.BRAND和Build.DEVICE可以是用于x86架构和Build的“generic_x86”。 PRODUCT可以是“sdk_google_phone_x86” –

0

我知道这是一个老问题,但只是有同样的问题。我修改Nermeen回答了一下,因为它不工作了:

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

有这么多的方式来实现这一目标,如: (1)执行cat/proc/cpuinfo中,仿真器包含了“金鱼”,真正的设备包含“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 
}; 

参见文章“睡眠:自动生成启发式技术来检测的Android仿真器”为更多资料。

相关问题