是否有一些实用功能来识别代码是在仿真器还是硬件上运行?

时间:2011-11-11 21:36:44

标签: android

我的要求是调用函数的特定变体(如果它是Emulator和不同的函数) 变种是硬件。

4 个答案:

答案 0 :(得分:0)

我使用此代码(您也可以获取代码来提取序列号)

public static String getDeviceSerialNumber(Context ctx)
    {
        String phoneSerial = null;

        try
        {
            phoneSerial = ((TelephonyManager)ctx.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
        }
        catch(Exception ex)
        {
            phoneSerial = null;
        }

        //If it's not a phone or for some reason we can't get serial/IMEI - get serial from
        if (phoneSerial == null)
        {
            try
            {
                Class<?> c = Class.forName("android.os.SystemProperties");
                Method get = c.getMethod("get", String.class);
                phoneSerial = (String) get.invoke(c, "ro.serialno");
            } catch (Exception ignored) {}
        }


        return phoneSerial;
    }

    public static boolean isRunningInEmulator(Context ctx)
    {
        return "000000000000000".equals(getDeviceSerialNumber(ctx));
    }

答案 1 :(得分:0)

使用Build.DEVICE

答案 2 :(得分:0)

我用过

String bpStr = Build.PRODUCT;
if ("google_sdk".equals(bpStr))
  // IT'S RUNNING ON THE EMULATOR

答案 3 :(得分:0)

虽然在我看来其他选项似乎更好,因为您永远不知道未来的设备是否会省略包括此项,您还可以检查加速计传感器。仿真器不支持一个,目前所有拥有Android市场和谷歌原生应用程序的手机都有加速度计。

在onCreate中,在实现SensorEventListener之后;

    SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    if (manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() == 0) {
            textView.setText("No accelerometer installed"); 
    }