要存储在共享首选项中的倒计时计时器值

CountDown Timer value to be stored in shared preference

抱歉,如果我没有为我的问题写一个合适的标题。 我正在开发一个 android 游戏,我必须从 10 分钟开始倒计时。要存储在 textView 中的值 现在我的 textView 显示倒计时值,即它从 09:59 开始并逐秒递减,但显然当我关闭应用程序然后重新启动时它消失了。这应该通过共享首选项保存,但我很困惑如何在其中使用共享首选项。 即,如果我在还剩 07:45 分钟时关闭应用程序并保存首选项,那么当我将 return 并在 2 分钟后重新启动应用程序时,它应该显示还剩 05:45 分钟,那么我怎么才能得到那?因为如果我从系统时间中减去倒计时时间,那么它可能不是我想要的结果,因为系统时间是小时格式,我只使用分钟和秒。

这里是oncreate之前的代码

MyCounter timer = new MyCounter(600000,1000);
private static final String FORMAT = "%02d:%02d";

这就是我用来在文本视图中获取倒数计时器的方法

public class MyCounter extends CountDownTimer{

        public MyCounter(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onFinish() {
            datetime.setText("Timer Completed,Now you can play");
        }

        @Override
        public void onTick(long millisUntilFinished) {
            datetime.setText(""+String.format(FORMAT,

TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
                    TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
  TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
                      TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));

        }
    }

任何link特定代码和使用倒计时的共享偏好示例都会对我有很大帮助

创建一个闹钟设置方法,这个是用来set/start闹钟的。

public void SetAlarm(Context context){ 
    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, TenMinuteTimer.class);   
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,  intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10*60*1000, pendingIntent);  
}

取消闹钟,此方法用于到达

后解除闹钟
public void CancelAlarm(Context context){
    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, TenMinuteTimer.class);   
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,  intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmMgr.cancel(pendingIntent);
}

当警报结束那 10 分钟时保存

public class TenMinuteTimer extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    //Save, timer has completed.
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(); 
    prefs.edit().putBoolean("timerCompleted", true).commit();

    //cancel the Alarm, no need for repeating (right?)
    CancelAlarm(this);
}

添加到您的Manifest.XML:

 <receiver 
     android:name=".TenMinuteTimer"
     android:enabled="true"
     android:process=":remote"> 
 </receiver>

Start/Set 随时调用 SetAlarm(this) 方法

闹钟

Check ,当用户再次启动您的应用程序时,只需通过添加到您的 onCreate() 来检查计时器是否已完成:

Boolean usetTimerCompleted = prefs.getBoolean("timerCompleted", false);  //False if not yet saved (first time), or timer is not yet completed

if (usetTimerCompleted){
// User Timer is completed, now do something
}

这应该可以, 如果我做错了什么,请编辑我的post,或在下面发表评论。

我没测试过!