Compass适用于真实设备,但不适用于Emulator

时间:2018-01-03 08:16:32

标签: android android-emulator android-sensors

编辑: Android工作室很慢地告诉我Sensor.TYPE_ORIENTATION已被弃用。出于某种原因,在编写并运行代码之后很久才告诉我。然而,问题仍然存在。我只是想在我的问题中添加这个发现。

我有一个充当指南针的ImageView。在真实设备上一切正常,但在我的模拟器上,扩展控件对ImageView没有影响。

如果我在模拟器上访问Google地图,我可以看到罗盘正常工作。如果它在真实设备上运行,为什么我的应用程序不能正常工作?

字段:

 /*
COMPASS STUFF
 */
private ImageView compass;
private float currentDegree = 0f;
private SensorManager mSensorManager;

的onCreate:

compass = findViewById(R.id.compass);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

的onResume:

 @Override
protected void onResume() {
    super.onResume();

    mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
            SensorManager.SENSOR_DELAY_GAME);
}

的onPause:

@Override
protected void onPause() {
    super.onPause();

    mSensorManager.unregisterListener(this);
}

onSensorChanged:

@Override
public void onSensorChanged(SensorEvent sensorEvent) {

    float degree = Math.round(sensorEvent.values[0]);

    RotateAnimation rotateAnimation = new RotateAnimation(
            currentDegree,
            -degree,
            Animation.RELATIVE_TO_SELF, 0.5f,
            Animation.RELATIVE_TO_SELF,
            0.5f);

    rotateAnimation.setDuration(210);
    rotateAnimation.setFillAfter(true);
    compass.startAnimation(rotateAnimation);
    currentDegree = -degree;
}

老实说,我不知道还有什么可以发布,因为我已经在2部手机(Galaxy s6 Active和Galaxy s8 Edge Plus)上进行了测试,并且两者都有效。它只是在模拟器中没有做任何事情。

我将证明它可以在我自己的物理设备上运行。

enter image description here

enter image description here

模拟器失败.... --_______ -

enter image description here

enter image description here

有什么建议吗?我真的想测试其他API /设备。

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,我对已弃用Sensor.TYPE_ORIENTATION的发现解决了我的问题。我使用了Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD常量,我的指南针现在在我的模拟器中工作。 :-)

我使用this博客来帮助我了解传感器的用法。

This是博客的一步一步视频版。