1.拨打电话和设备参数
/*** 检测当前设备是否是模拟器.*/public static boolean checkEmulator(Context context) {String url = "tel:" + "123456";Intent intent = new Intent();intent.setData(Uri.parse(url));intent.setAction(Intent.ACTION_DIAL);// 是否可以处理跳转到拨号的 Intentboolean canResolveIntent = intent.resolveActivity(context.getPackageManager()) != null;String fingerprint = Build.FINGERPRINT;//唯一标识此版本的字符串。String model = Build.MODEL;//手机型号String serial = Build.SERIAL;//硬件序列号,安卓8.1废弃.return fingerprint.startsWith("generic")|| fingerprint.toLowerCase().contains("vbox")|| fingerprint.toLowerCase().contains("test-keys")|| model.contains("google_sdk")|| model.contains("Emulator")|| model.contains("Android SDK built for x86")|| serial.equalsIgnoreCase("unknown")|| serial.equalsIgnoreCase("android")|| Build.MANUFACTURER.contains("Genymotion")//制造商|| (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))|| "google_sdk".equals(Build.PRODUCT)//整体产品的名称|| ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkOperatorName().toLowerCase().equals("android")|| !canResolveIntent;}
2.光传感器
/*** 判断是否存在光传感器来判断是否为模拟器* 部分真机也不存在温度和压力传感器。其余传感器模拟器也存在。* @return true 为模拟器*/
public static Boolean notHasLightSensorManager(Context context) {SensorManager sensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);Sensor sensor8 = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); //光if (null == sensor8) {return true;} else {return false;}
}
3.蓝牙
/**判断蓝牙是否有效来判断是否为模拟器*返回:true 为模拟器*/public static boolean notHasBlueTooth() {BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();if (ba == null) {return true;} else {// 如果有蓝牙不一定是有效的。获取蓝牙名称,若为null 则默认为模拟器String name = ba.getName();if (TextUtils.isEmpty(name)) {return true;} else {return false;}}}
4.CPU
/**根据CPU是否为电脑来判断是否为模拟器*返回:true 为模拟器*/public static boolean checkIsNotRealPhone() {String cpuInfo = readCpuInfo();if ((cpuInfo.contains("intel") || cpuInfo.contains("amd"))) {return true;}return false;}/**根据CPU是否为电脑来判断是否为模拟器(子方法)*返回:String*/public static String readCpuInfo() {String result = "";try {String[] args = {"/system/bin/cat", "/proc/cpuinfo"};ProcessBuilder cmd = new ProcessBuilder(args);Process process = cmd.start();StringBuffer sb = new StringBuffer();String readLine = "";BufferedReader responseReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf-8"));while ((readLine = responseReader.readLine()) != null) {sb.append(readLine);}responseReader.close();result = sb.toString().toLowerCase();} catch (IOException ex) {}return result;}