【问题标题】:Android: Starting a service at a chosen timeAndroid:在选定的时间启动服务
【发布时间】:2014-10-23 14:13:15
【问题描述】:

我有一个 BroadcastReceiver 正在启动一项服务。在这个服务中,我有一个 AlarmManager 我想在每天的某个时间启动另一个服务。

BroadcastReceiver 在我打开应用时启动,但 AlarmManager 只有在我在设定的时间启动 BroadCastReceiver 时才会启动它的服务。

如何让它不断地比较当前时间和设定的时间,让它在合适的时候自动运行?

在 MainActivity.java 中

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent();   
    intent.setAction("com.example.BroadcastPro.MyBroadcastReceiver");   
    sendBroadcast(intent);  
}

在 myBroadcastReceiver.java 中

public class MyBroadcastReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) 
    {
        Intent  i=new Intent(context,SetPeriodicService.class);    
        context.startService(i);
    }
}

在 SetPeriodicService.java 中

public int onStartCommand(Intent intent, int flags, int startId)    
{
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 12);
    calendar.set(Calendar.MINUTE, 30);  

    Intent i=new Intent(this,MyService.class);  
    PendingIntent alarmIntent = PendingIntent.getService(this, 0, i, 0);
    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmManager.INTERVAL_DAY, alarmIntent);

    return super.onStartCommand(intent, flags, startId);    
}

【问题讨论】:

  • 您的问题不太清楚:MyService' not get started on schedule if SetPeriodicService` 是否正在运行?您不能通过从旧服务发布延迟的可运行文件在所需时间简单地启动新服务吗?
  • @user87049 不,MyService 不会启动,除非我完全在设定的时间运行应用程序。

标签: java android android-service alarmmanager android-calendar


【解决方案1】:

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmManager.INTERVAL_DAY, alarmIntent); 的 SetPeriodicService.java 你需要改成alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmMgr.INTERVAL_DAY, alarmIntent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多