Как продолжать работать CountDownTimer после перезагрузки телефона - PullRequest
0 голосов
/ 28 февраля 2020

Я новичок в Android Программирование. Я сделал таймер обратного отсчета, и он работает хорошо. но я хочу начать снова, когда телефон перезагружается. MainActivity. java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startService(new Intent(this, PeriodDietService.class));
    }

PeriodDietService. java

public class PeriodDietService extends Service {
  CountDownTimer cdt = null;

  public void onCreate() {
    super.onCreate();
    cdt = new CountDownTimer(30000, 3000) {
      public void onTick(long millisUntilFinished) {
        Toast.makeText(PeriodDietService.this.getApplicationContext(), "Is Running", Toast.LENGTH_SHORT).show();
      }

      public void onFinish() {
        Toast.makeText(PeriodDietService.this.getApplicationContext(), "Is Finished", Toast.LENGTH_SHORT).show();
      }
    };
    cdt.start();
  }

  public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
}

Благодарим вас за помощь

1 Ответ

2 голосов
/ 28 февраля 2020

Вы должны использовать BroadcaseReceiver, который запускается при загрузке телефона. Вы зарегистрировали бы этот получатель в своем файле манифеста с помощью чего-то вроде тега получателя, приведенного ниже, включая любые намерения, которые вы хотите активировать. В методе onReceive BroadcaseReceiver вы можете запустить свой сервис (вы можете захотеть взглянуть на JobIntentService вместо сервиса, если у вас возникнут проблемы с ограничениями фонового выполнения в более поздних версиях android).

Вы будете хотите рассмотреть, как это происходит при запуске - если обратный отсчет продолжится с того места, где он остановился, и т.д. c. Возможно, вам понадобится ветка в вашем сервисе, которая «возобновит» обратный отсчет, возможно, сохранит ваш прогресс в обратном отсчете через определенные промежутки времени и загрузит туда, где вы остановились в последний раз.

    <receiver
        android:name="com.example.YourClassExtendingBroadCastReceiver"
        android:directBootAware="true"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>
...