Compass适用于真实设备,但不适用于Emulator
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Compass适用于真实设备,但不适用于Emulator相关的知识,希望对你有一定的参考价值。
编辑: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);
特价:
@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)上进行了测试,并且它在两者上都有效。它只是在模拟器中没有做任何事情。
我将证明它可以在我自己的物理设备上运行。
在模拟器上失败.... --_______--
有什么建议?我真的想测试其他API /设备。
好吧,事实证明,我发现有关被弃用的Sensor.TYPE_ORIENTATION
解决了我的问题。我使用了Sensor.TYPE_ACCELEROMETER
和Sensor.TYPE_MAGNETIC_FIELD
常数,我的指南针现在在我的模拟器中工作。 :-)
我使用this博客来帮助我理解传感器的用法。
This是博客的一步一步视频版本。
以上是关于Compass适用于真实设备,但不适用于Emulator的主要内容,如果未能解决你的问题,请参考以下文章
正在尝试在 Android 设备上检索位置...适用于模拟器,但不适用于真实设备
PHP header('Content-Type : image/jpeg') 适用于本地主机但不适用于真实服务器
NSKeyedArchiver 适用于模拟器,但不适用于实际设备