#android
Требует реализовать вызов определенной функции раз в N часов. Но если использовать допустим TimerTask то при погасании подсветки телефона он перестает выполнятся, иначе говоря работает только когда телефон не спит. Мне же нужно отслеживать постоянно, даже если телефон спит (Не выключен!).
Ответы
Ответ 1
Во-первых, нужно добавить в манифест разрешение WAKE_LOCKВо-вторых, подключить AlarmManager public class AlarmClock extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SOME_TAG"); wl.acquire(); // TODO: Что-то делаем wl.release(); } public void ToggleAlarm(Context context, Boolean fire) { AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, AlarmClock.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); if (fire) { am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 3600000, pi); } else { am.cancel(pi); } } } Ответ 2
Запусти простенький Thread, который скажем каждые N секунд запускает какую то хрень. Примерно так: public class Waiter extends Thread { private static final String TAG=Waiter.class.getName(); private long period; private boolean stop; public Waiter(long period) { this.period=period; stop=false; } public void run() { do { try { Thread.sleep(period); } catch (InterruptedException e) { Log.d(TAG, "Waiter interrupted!"); stop=true; break; } //запускаем свою хрень } while(!stop); Log.d(TAG, "Finishing Waiter thread"); } public synchronized void forceStop() { this.stop=true; } }Ответ 3
AlarmManager
Комментариев нет:
Отправить комментарий