Вы можете использовать один и тот же слушатель для всех датчиков.Но если вы действительно хотите прослушать несколько или даже все датчики, вам нужно переписать эту строку:
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)
иПовторите список, чтобы зарегистрировать каждый содержащийся датчик соответственно.
Относительно вашего вопроса об экономии заряда батареи - я не знаю, работают ли датчики постоянно.Даже если это так, всегда можно сэкономить заряд батареи, уменьшив ненужную обработку.Если вам не нужна информация, которую предоставляет конкретный датчик, не регистрируйтесь для получения сообщений от него.Это уменьшает количество сообщений, отправляемых на ваше приложение.