CountDown计时器值存储在共享首选项中

时间:2016-02-19 09:05:56

标签: android timer sharedpreferences countdown

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

这是oncreate之前的代码

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

这就是我用来获取textview中的倒数计时器

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))));

        }
    }

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

1 个答案:

答案 0 :(得分:0)

创建警报设置方法,用于设置/启动警报。

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>

随时启动/设置您的闹钟,方法是调用SetAlarm(this)方法

检查,当用户再次启动您的应用时,只需通过添加到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
}

这应该有用, 如果我做错了,请编辑我的帖子,或在下面发表评论。

我没有对此进行测试!