Есть класс который следит за данными акселерометра. Если устройство не в движении и экран выключен, то он должен включиться если его взять в руки. Вот код класса
public class Accelerometer {
private Activity activity;
private Fonts fonts;
private Screen2 Screen2;
//
private Integer x = 0;
private Integer y = 0;
private Integer z = 0;
private PowerManager pm;
private PowerManager.WakeLock wl;
private long timer = 0;
public Accelerometer (Activity activity_, Fonts fonts_, Screen2 Screen2_) {
this.activity = activity_;
this.fonts = fonts_;
this.Screen2 = Screen2_;
pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);
SensorManager sensorManager = (SensorManager) this.activity.getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
Integer x_ = Math.round(event.values[0]);
Integer y_ = Math.round(event.values[1]);
Integer z_ = Math.round(event.values[2]);
try {
if (!z_.equals(z)) {
x = x_;
y = y_;
z = z_;
// устройство в движении
if (!pm.isScreenOn()) { // и экран выключен
Log.d("appLog", "wakeup");
// включаем экран
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
wl.acquire();
if (timer != 0 && System.currentTimeMillis() - timer > 90000) {
// если простой больше 1.5 минут - всегда новый опрос
activity.dismissDialog(1);
clearApp();
} else {
// если меньше 1.5 минут - то спрашиваем что делать
activity.showDialog(1);
}
wl.release();
} else {
}
timer = 0;
} else {
// устройство не в движении
if (timer == 0) {
timer = System.currentTimeMillis();
}
}
} catch (Exception e) {
Log.d("appLog", "Acc Error");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
}, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}}
Но работает он как-то странно, то включается то не включается. Если кабель подключен к компьютеру, то всегда работает так как задумано, а без кабеля при выключенном дисплее акселерометр работает как-то не правильно. Какие тут есть нюансы?
Когда подключено через зарядку/usb то обычно в режим сна не уходит.
Что делать? писать сервис, который будет лочить переход в режим сна. Но на подобный код пользователи будут жаловаться сильно-сильно - батарею будет высаживать просто на ура.
– KoVadim Nov 30 '15 at 09:40