要存储在共享首选项中的倒计时计时器值
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,或在下面发表评论。
我没测试过!
抱歉,如果我没有为我的问题写一个合适的标题。 我正在开发一个 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,或在下面发表评论。
我没测试过!