如果在Android中达到特定日期和时间,我如何检查后台

时间:2016-07-27 12:40:10

标签: android date time background sharedpreferences

我正在尝试制作一个程序,在后台检查是否达到了特定的日期和时间。我想在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,但我的日历设置为一分钟后。有什么问题?

2 个答案:

答案 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)

正如您所提到的,您知道如何使用共享首选项

  1. 您可以用字符串形式从SharedPreference中读取日期。
  2. 然后您需要在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){    }    归期; }

  3. 注意:此处字符串格式可以是您在SharedPref中保存的任何模式。 SimpleDateFormat Pattern examples

    1. 获取当前日期。

      日期currentDate =新日期();

    2. 然后,您可以使用以下任何一种方法比较这两个日期。

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