使用AlarmManager从另一个服务启动服务

时间:2016-05-04 19:44:12

标签: android android-service alarmmanager

我在Eclipse下编写Android代码,我将在其中处理两项服务:MyService1MyService2。第一个是由{MainActivity'中的AlaramManager触发的。如下:

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, NumSec);
long time = cal.getTimeInMillis();
Intent i = new Intent(getApplication(), MyService1.class);
PendingIntent pintent = PendingIntent.getBroadcast(getApplication(), 0, i, 0);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, AlarmManager.INTERVAL_DAY, pintent);

这没关系,而且运作良好。 现在,我将以同样的方式使用MyService2再次从MyService1开始第二项服务AlarmManager。但是我的代码中存在错误:

Intent myIntent = new Intent(MyService1.this, MyService2.class);

我知道函数Intent有两个参数,第一个是Context类型。我尝试了一些其他的方法,但没有它们工作!例如:

Intent myIntent = new Intent(getBaseContext(), MyService2.class);
Intent myIntent = new Intent(getApplication(), MyService2.class);

有什么建议吗?! 提前谢谢。

将帖子 我的第一项服务如下:

public class MyService1 extends BroadcastReceiver {
@Override
     public void onReceive(Context con, Intent arg1) {
        AlarmManager am = (AlarmManager) con.getSystemService(Service.ALARM_SERVICE);
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 10);
        long time = cal.getTimeInMillis();
        Intent i = new Intent(con, MyUpService.class);
        PendingIntent pint = PendingIntent.getBroadcast(con, 0, i, 0);
        am.set(AlarmManager.RTC_WAKEUP, time, pint);
    }
}

2 个答案:

答案 0 :(得分:0)

您应该使用PendingIntent.getService来启动服务,而不是PendingIntent.getBroadcast。 http://developer.android.com/reference/android/app/PendingIntent.html#getService(android.content.Context,int,android.content.Intent,int)

答案 1 :(得分:0)

你的回调中的

Context Object

public void onReceive(Context con, Intent arg1) {
}

所以你可以使用这个

Intent myIntent = new Intent(con, MyService1.class);
Intent myIntent1 = new Intent(con, MyService2.class);