最近有项目需要设备模拟器,此贴用来记录我识别模拟器的方法:
1、通过能否打电话来判断模拟器:
String url = "tel:" + "10086";
Intent intent = new Intent();
intent.setData(Uri.parse(url));
intent.setAction(Intent.ACTION_DIAL);
// 隐示意图跳转到打电话界面 Intent (检查是否存在)
boolean canResolverIntent = intent.resolveActivity(context.getPackageManager()) != null;
canResolverIntent ==true,可以打电话,判断为真机。
目前主流模拟器都没有打电话这个功能:
这个来判断基本可以ban掉很多模拟器了
2、通过cpu来判断:
基本x86可以判定为模拟器
Build.MODEL.contains("x86")
android.os.Build.CPU_ABI.contains("x86")
3、第三通传感器来判断:例如:光传感器,方向传感器。
/** * 判断是否存在光传感器来判断是否为模拟器 部分真机也不存在温度和压力传感器。其余传感器模拟器也存在。 * * @return true 为模拟器 */ public int notHasLightSensorManager(Context context) { SensorManager sensorManager = (SensorManager) context .getSystemService(Context.SENSOR_SERVICE); Sensor sensor8 = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 光 if (null == sensor8) { Log.i("", "光传感器判定为false"); return 0; } else { Log.i("", "光传感器判定为true"); return 1; } }