重启电话后如何继续运行CountDownTimer

问题描述 投票:0回答:1

我是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;
  }
}

感谢您的帮助

android countdowntimer
1个回答
0
投票

您应该使用在电话启动时运行的BroadcaseReceiver。您可以在清单文件中使用类似于以下接收者标签的方式注册该接收者,包括您想要触发接收者的任何意图。在BroadcaseReceiver的onReceive方法中,您可以启动服务(如果您在更高版本的android中遇到后台执行限制的问题,则可能要看JobIntentService而不是service)。

[您将要考虑启动时的行为-如果倒数计时从中断的地方开始,依此类推。等等。有可能您需要在服务中使用一个分支来“恢复”倒数,也许可以保存倒数的进度间隔并加载最后一次中断的位置。

    <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>
© www.soinside.com 2019 - 2024. All rights reserved.