Код сервиса, который каждую минуту запускает вибрацию на телефоне.
Как только экран гаснет, сервис прекращает работу. Как запретить остановку? И как в нужный момент по кнопке остановить этот сервис?
public class TimeService extends Service {
Vibrator vib;
public static final long NOTIFY_INTERVAL = 60 * 1000; // 60 seconds
private Handler mHandler = new Handler();
private Timer mTimer = null;
@Override
public IBinder onBind(Intent intent) { return null; }
@Override
public void onCreate() {
vib = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
// cancel if already existed
if (mTimer != null) { mTimer.cancel();}
else { mTimer = new Timer(); }
// schedule task
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0,
NOTIFY_INTERVAL);
}
class TimeDisplayTimerTask extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
vib.vibrate(500);
}
});
}
Запускаю сервис так:
public void onClick_btTask(View v) {
startService(new Intent(this, TimeService.class));
}
Ответ
Service по умолчанию работает в том же потоке, что и запускающая его activity. Чтобы вибрировать каждую минуту, можете попробовать использовать связку с IntentService и AlarmManager-а с ключом RTC_WAKEUP, который будет этот IntentService каждую минуту вызывать. Примерно так:
public class VibrateService extends IntentService {
public static final String TAG = "VibrateService";
public VibrateService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
Vibrator vibrator = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(500);
}
}
...
Intent intent = new Intent(this, VibrateService.class);
// Запуск повторения вызова сервиса
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60 * 1000,
PendingIntent.getService(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT));
Конечно же, VibrateService должен быть объявлен в манифесте, как и разрешение вибрировать:
Комментариев нет:
Отправить комментарий