Работа шагомера при заблокированном экране
Добавлено: 30 июл 2015, 15:19
Друзья, добрый день!
Буду очень признателен, если поможете советом. Разбирался с темой сенсоров, и в качестве эксперимента, для себя, решил написать простенький шагомер, работающий на базе сенсора STEP_DETECTOR. Все замечательно, вот только он ни в какую не хочет работать при заблокированном экране. Wake lock'ом проблема так же не разрешилась( третий день голову ломаю, но не могу понять, как заставить его работать.
В наличии всего два класса - Activity и Service. В activity только пара кнопок по которым стартует и завершается сервис. Вся логика находится в сервисе.
Собственно, код:
В манифесте соответствующий wake lock пермишн стоит.
Если телефон вывести из спячки нажатием power, но экран не разлочивать, то сенсор оживает и работает, пока не потухнет экран. Соответственно, выходит, что у меня не работает wakeLock, или в чем проблема?
Заранее большое спасибо!
p.s.
За показаниями сенсора наблюдаю по логу, в UI пока ничего не выводил.
Буду очень признателен, если поможете советом. Разбирался с темой сенсоров, и в качестве эксперимента, для себя, решил написать простенький шагомер, работающий на базе сенсора STEP_DETECTOR. Все замечательно, вот только он ни в какую не хочет работать при заблокированном экране. Wake lock'ом проблема так же не разрешилась( третий день голову ломаю, но не могу понять, как заставить его работать.
В наличии всего два класса - Activity и Service. В activity только пара кнопок по которым стартует и завершается сервис. Вся логика находится в сервисе.
Собственно, код:
Код: Выделить всё
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.IBinder;
import android.os.PowerManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.Toast;
import java.util.Arrays;
public class MyFirstService extends Service implements SensorEventListener {
private SensorEventListener sel;
private static final String TAG = "MYSERVICE666";
private PowerManager.WakeLock wakeLock;
SensorManager sm;
public MyFirstService() {
super();
Log.d(TAG, "constructor " + Thread.currentThread().getName());
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate" + Thread.currentThread().getName());
acquireWakeLock();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStartCommand " + Thread.currentThread().getName());
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor s = sm.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
sm.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL);
NotificationManager myNotif = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent bIntent = new Intent(MyFirstService.this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MyFirstService.this, 0, bIntent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.abc_ic_clear_mtrl_alpha)
.setContentTitle("Title")
.setContentText("ANything")
.setAutoCancel(true)
.setContentIntent(pendingIntent);
Notification notification = builder.build();
this.startForeground(565656, notification);
return START_STICKY;
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy" + Thread.currentThread().getName());
sm.unregisterListener(sel);
wakeLock.release();
super.onDestroy();
}
public void acquireWakeLock() {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Log.d(TAG, "onSensorChanged " + Thread.currentThread().getName() +
". SensorEvent - " + Arrays.toString(sensorEvent.values));
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}
Если телефон вывести из спячки нажатием power, но экран не разлочивать, то сенсор оживает и работает, пока не потухнет экран. Соответственно, выходит, что у меня не работает wakeLock, или в чем проблема?
Заранее большое спасибо!
p.s.
За показаниями сенсора наблюдаю по логу, в UI пока ничего не выводил.