我正在尝试制作一个程序,在后台检查是否达到了特定的日期和时间。我想在SharedPreference中保存日期和时间。 SharedPreferences不是问题,但我需要知道如何制作在后台运行的服务,并检查SharedPreference中的日期和时间是否等于当前时刻的日期和时间。我还需要在启动时启动服务。这就是我现在所拥有的:
Android清单
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="Receiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service
android:name=".Service"
android:exported="false"/>
接收机
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, Service.class));
}
服务
SharedPreferences prefs;
public Service() {
super("Service");
}
@Override
protected void onHandleIntent(Intent workIntent) {
prefs = getSharedPreferences("nl.martijnvk.declareerassistent", Context.MODE_PRIVATE);
}
修改
感谢Prashanth,我得到它使用AlarmManager类,但毫秒的计算是不正确的。在我的日志中,他打印的值为1469632151229,但我的日历设置为一分钟后。有什么问题?
答案 0 :(得分:1)
在您的活动中
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, 6);
calendar.set(Calendar.YEAR, 2013);
calendar.set(Calendar.DAY_OF_MONTH, 13);
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 48);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.AM_PM,Calendar.PM);
Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
创建将被触发的广播接收器
{
@Override
public void onReceive(Context context, Intent intent)
{
// it is triggered on the time you scheduled
}
}
答案 1 :(得分:0)
正如您所提到的,您知道如何使用共享首选项
然后您需要在Date对象中转换该String:
public static Date getDateFromString(String dateString,String format){ 日期日期= null; 尝试{ if(dateString!= null){ SimpleDateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateString); } } catch(例外e){ } 归期; }
注意:此处字符串格式可以是您在SharedPref中保存的任何模式。 SimpleDateFormat Pattern examples 强>
获取当前日期。
日期currentDate =新日期();
然后,您可以使用以下任何一种方法比较这两个日期。
public static boolean isEqualiOrBefore(Date baseDate,Date dateToCompare){
try {
return (baseDate.equals(dateToCompare) || baseDate.before(dateToCompare));
}
catch (NullPointerException npe) {
return false;
}
}
public static boolean isEqualiOrAfter(Date baseDate, Date dateToCompare) {
try {
return (baseDate.equals(dateToCompare) || baseDate.after(dateToCompare));
}
catch (NullPointerException npe) {
return false;
}
}
public static boolean isEquali(Date baseDate, Date dateToCompare) {
try {
return (baseDate.equals(dateToCompare));
}
catch (NullPointerException npe) {
return false;
}
}