Android传感器 - 接近传感器的问题使用不同的手机时的值和问题
过去已经完成了一些Android开发,但它已经有一段时间了 - 想要构建一个使用方向和接近传感器的应用程序。所以...Android传感器 - 接近传感器的问题使用不同的手机时的值和问题
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ALL) , SensorManager.SENSOR_DELAY_GAME);
因此,设置听众 - 倾听所有传感器 - 我是否应该只听两个? (这会节省电池?)
Sensor mySensor = event.sensor;
// if (mySensor.getType() != Sensor.TYPE_ORIENTATION) return;
if (mySensor.getType() == Sensor.TYPE_ORIENTATION)
{
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
tv.setText("Rotation around X, Azimuth = " + x);
tv1.setText("Rotation around Y, Pitch = " + y);
tv2.setText("Rotation around Z, Roll = " + z);
}
if (mySensor.getType() == SensorManager.SENSOR_PROXIMITY)
{
float p = event.values[0];
tv3.setText("Proximity = " + p);
}
然后在onSensorChanged - 见上
我LG的Optimus One我可以得到它的方向传感器的TextView显示值(此电话不有一个接近传感器)
但在我的Nexus One上运行相同的代码导致一个可爱的空白屏幕!?
对不起,长的问题!但任何帮助将是一件好事,如果你需要更多的Infor只是问, LG手机是2.2的Nexus One是2.2.2 感谢,
大卫
您可以使用相同的监听所有传感器。 但如果你真的要听多甚至全部的传感器,你需要重写这一行:
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ALL) , SensorManager.SENSOR_DELAY_GAME);
由于实际执行getDefaultSensor(int type)
只返回一个传感器,如在源代码:
public Sensor getDefaultSensor(int type) {
// TODO: need to be smarter, for now, just return the 1st sensor
List<Sensor> l = getSensorList(type);
return l.isEmpty() ? null : l.get(0);
}
public List<Sensor> getSensorList(int type) {
// cache the returned lists the first time
List<Sensor> list;
final ArrayList<Sensor> fullList = sFullSensorsList;
synchronized(fullList) {
list = sSensorListByType.get(type);
if (list == null) {
if (type == Sensor.TYPE_ALL) {
list = fullList;
} else {
list = new ArrayList<Sensor>();
for (Sensor i : fullList) {
if (i.getType() == type)
list.add(i);
}
}
list = Collections.unmodifiableList(list);
sSensorListByType.append(type, list);
}
return list;
}
所以在Sensor.TYPE_ALL
情况下该方法getSensorList(int type)
提供可用的所有传感器和getDefaultSensor(int type)
只返回它的第一个的(无序)列表。
因为包含所有传感器的列表是无序的,所以getDefaultSensor(Sensor.TYPE_ALL)提供一个随机传感器。我试了一下,首先拿到了加速度计,下次光线传感器。由于您只处理侦听器中的方向和接近度更改,我会怀疑getDefaultSensor(Sensor.TYPE_ALL)在您的Nexus上提供了不同的传感器。
您应该会收到一个列表,其中包含mSensorManager.getSensorList(Sensor.TYPE_ALL)
的所有传感器,并遍历列表,以便分别注册每个包含的传感器。
关于你关于节约电池的问题 - 我不知道,如果传感器永久运行。即使是这种情况,也可以通过减少不必要的处理来节省电池电量。如果您不需要特定传感器提供的信息,请不要注册接收来自它的消息。这减少了发送到您的应用程序的消息。
因此,我想要的东西是理所当然的 - 我为所有传感器设置了一个监听器,但似乎我需要两个监听器 - 一个用于定向,另一个用于Proximity – 2011-02-23 13:01:28
我的印象是您可以使用相同的监听器。但是,请记住,方向传感器已弃用。 – CommonsWare 2011-02-23 13:03:43
我读得很好,但Eclipse并未警告它? - 瞄准Android 2.1的应用程序 - 你知道如何快速使用.getOrientation? – 2011-02-25 20:50:16