【问题标题】:How to start an activity on a certain time?如何在特定时间开始活动?
【发布时间】:2014-03-12 06:46:36
【问题描述】:

这个问题可能与thisthis 问题有关,但与那些问题不同,我想在特定时间开始它们,(比如2014 年3 月15 日11:12:13)。

我实际上正在开发一个在给定时间发送消息的项目 (SMS)。

【问题讨论】:

  • 问题不清楚你在问什么。
  • @kalyanpvs 我想开始一个活动,我将使用该活动来调用 SmsManager。
  • 按照@Vishal Santharam 的建议行事..
  • Quartz Cron Job、Java Timer、Android AlarmManager...很多可能性

标签: android android-activity sms smsmanager


【解决方案1】:

试试这段代码,我测试过:

首先:创建日历:

Calendar calendar = Calendar.getInstance();
  • 并通过以下方式之一设置时间:

    calendar.set(year, month, day, hourOfDay, minute);
    // be careful month start form "0" so for "May" put "4"
    
  • 或:

    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minute);
    

第二:添加这个:

Intent intent = new Intent(MainActivity.this, NextActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
((AlarmManager) getSystemService(ALARM_SERVICE)).set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

注意:如果你需要一个定时器,你可以将上面代码中的alendar.getTimeInMillis()替换为System.currentTimeMillis() + x。 (xint 的毫秒数,您需要等待)

【讨论】:

    【解决方案2】:

    使用 Android API 中的AlarmManager。只需按照本教程进行操作:

    http://android-er.blogspot.in/2011/05/using-alarmmanager-to-start-scheduled.html.

    在上面的教程中,他们谈到了在一段时间后安排活动。在您的情况下,只需获取当前时间与您启动和探索 API 的时间之间的差值即可。

    【讨论】:

      【解决方案3】:

      如果您想在创建时间启动 Activity,请使用 AlarmManager。

      我为此写了一个例子。

      Intent intent = new Intent(this, YourReceiver.class);
      
      //11:12:13 on 15/03/2014 
      
      Calendar cal=Calendar.getInstance();
      cal.set(Calendar.MONTH,2);//because is started from 0
      cal.set(Calendar.YEAR,2014);
      cal.set(Calendar.DAY_OF_MONTH,15);
      cal.set(Calendar.HOUR_OF_DAY,11);
      cal.set(Calendar.MINUTE,12);
      
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT|  Intent.FILL_IN_DATA);
      
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
      
      
      
      alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
      

      使用 Contect.startActivity 方法在您的接收器调用活动中。 不要忘记在 meanifest.xml 中注册接收器。

      【讨论】:

      • 一个小问题假设我已经定义了它并且一切正常。但是我已经使用了 AlarmManager.INTERVAL_DAY,对于 setInexactRepeating 有没有办法从系统中删除它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多