每天自动更改textview
首先我想每天自动更改textview文本。例如,第一天textview文本是“第一文本”,第二天文本是“第二文本”,在8点钟eveyday。文本是永久的,直到第二天8点。每天自动更改textview
我尝试这段代码,但我的问题是,如果用户在8点没有打开此页面,则不会触发代码。文本里面“mquote阵”
SharedPreferences pref =getApplicationContext().getSharedPreferences("myPrefsKey",Context.MODE_PRIVATE) ;
dayCount = pref.getInt("dayCount", 0);
Calendar cal = Calendar.getInstance();
int hour=cal.get(Calendar.HOUR_OF_DAY);
int minute=cal.get(Calendar.MINUTE);
if ((hour==8 && minute==1))
updateQuote();
tvQuote.setText(mquote.getQuote(dayCount));
public void updateQuote()
{
if (dayCount==4)
dayCount=0;
dayCount++;
pref.edit().putInt("dayCount",dayCount).apply();
}
商店毫秒时,你上次在你的喜好更新喜好:
SharedPreferences pref = getApplicationContext().getSharedPreferences("msKey", Context.MODE_PRIVATE);
msCount = pref.getInt("msCount", 0);
long milliseconds = System.currentTimeMillis();
long diff = milliseconds - msCount;
diff += (8 * 60 * 60 * 1000); // compensating difference for 8'O clock condition
int days = (int) Math.ceil(diff/24/60/60/1000);
days %= 4; // Because you were resetting days count after 4 increments
updateQuote(days);
public void updateQuote(days) {
if(days == 0) {
pref.edit().putInt("msCount", milliseconds).apply();
}
}
感谢您的回答。我认为这是很好的算法,但它不起作用。当时间是8点时,文本不会始终更新。 – xamarin
听起来很愚蠢,但是,我没有把'tvQuote.setText(mquote.getQuote(dayCount));'在我的回答中,你是否错过了它?另外,我将'days'传递给'updateQuote'方法。 – BhalchandraSW
我更新了textview中updateQuote方法中的天数[tvQuote.setText(mquote.getQuote(days));'我错了吗? – xamarin
您应该使用时间戳能够比较两个日期。试试这个代码。 但是,1天发生在用户使用应用程序时,它不会触发。如果你想克服这个问题,那么使用AlarmManager每天触发一个事件。
SharedPreferences pref = getApplicationContext().getSharedPreferences("myPrefsKey",Context.MODE_PRIVATE);
lastDay_ms= pref.getInt("time_ms", 0);
Calendar today = Calendar.getInstance();
long diff = today.getTimeInMillis() - lastDay_ms; //result in millis
final long ONE_DAY = 24*60*60*1000; //millis in a day
if (diff > ONE_DAY)
updateQuote();
我认为AlarmManager适合。你首先建议AlarmManager。谢谢你的回答。 @uguboz – xamarin
你需要一个AlarmManager
实现:
public class AlarmReceiver extends BroadcastReceiver {
// The app's AlarmManager, which provides access to the system alarm services.
private AlarmManager alarmMgr;
// The pending intent that is triggered when the alarm fires.
private PendingIntent alarmIntent;
public void setAlarm(Context context) {
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
// set the Alarm's trigger time to 8:00 a.m.
calendar.set(Calendar.HOUR_OF_DAT, 9);
// Set the alarm to fire at approximately 8:30 a.m., according to the device's
// clock, and to repeat once a day.
alarmManager.setInexactRepeating(AlarmManager.RTC,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
}
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
alarm.setAlarm(context);
} else if(Objects.equals(intent, alarmIntent)) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("key", Context.MODE_PRIVATE);
int dayCount = pref.getInt("dayCount", 0);
dayCount %= 4;
pref.edit().putInt("dayCount", ++daysCount).apply();
}
}
}
检查这个https://developer.android.com/training/scheduling/alarms.html – uguboz
而不是检查准确时间(8:01) ,检查它是否大于某个值。 –
这不起作用,因为您正在检查时间是8:01。你应该检查时间是否大于8:00,如果你仍然在同一天。 – zed