Android 使用报警管理器执行一次任务
我尝试稍后使用AlarmManager执行一次操作。我按照代码和问题提出了这个Android 使用报警管理器执行一次任务,android,android-intent,broadcastreceiver,alarmmanager,android-pendingintent,Android,Android Intent,Broadcastreceiver,Alarmmanager,Android Pendingintent,我尝试稍后使用AlarmManager执行一次操作。我按照代码和问题提出了这个 public class EmailAccountUpdater extends BroadcastReceiver { // Constructors public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(AccountManager.LOGIN_ACCOUNTS_
public class EmailAccountUpdater extends BroadcastReceiver
{
// Constructors
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION))
{
Log.v("Test", " Step 1 - Creating the alarm " );
// Place holder
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent newIntent = new Intent("com.test.EMAIL_ACCOUNTS_CHANGED");
PendingIntent pendingIntent = PendingIntent.getBroadcast( context, 0, newIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.set( AlarmManager.RTC_WAKEUP, 35000, pendingIntent);
}
}
}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver
{
// constructors
@Override
public void onReceive(Context context, Intent intent)
{
Log.v("Test","Step 2 - Alarm received");
if (intent.getAction().equals("com.test.EMAIL_ACCOUNTS_CHANGED"))
{
onAccountsUpdated();
}
}
public void onAccountsUpdated()
{
// do something
}
}
在manifestManifest.xml文件中
<receiver android:name="full.path.AlarmReceiver">
<intent-filter>
<action android:name="com.test.EMAIL_ACCOUNTS_CHANGED"/>
</intent-filter>
</receiver>
但根据,不建议在BroadcastReceiver中使用postDelayed和Thread.sleep。所以我想到了这个。发生的事情是我总是得到第一步,但从来没有达到第二步。我做错了什么?欢迎提供任何帮助。解决方案是(根据您链接的线程):
如果您希望在广播后的某个时间发生某些事情,您可以启动一项服务,并且该服务需要等待一定的时间,或者如果您希望等待的时间超过几秒钟,您应该将此服务的启动放在AlarmManager中,让AlarmManager为您启动服务
您的计划不起作用,因为在EmailAccountUpdater.onReceive
返回后上下文被破坏。解决方案是(根据您链接的线程):
如果您希望在广播后的某个时间发生某些事情,您可以启动一项服务,并且该服务需要等待一定的时间,或者如果您希望等待的时间超过几秒钟,您应该将此服务的启动放在AlarmManager中,让AlarmManager为您启动服务
您的计划不起作用,因为在
EmailAccountUpdater.onReceive
返回后上下文被破坏。谢谢。我已经有一个服务在运行。我可以使用AlarmManager在现有服务中运行功能吗?如果您的服务已经是IntentService,那么您可以让它监听广播并安排自己的警报。否则,您可以像这样与您的服务沟通:谢谢。我已经有一个服务在运行。我可以使用AlarmManager在现有服务中运行功能吗?如果您的服务已经是IntentService,那么您可以让它监听广播并安排自己的警报。否则,您可以通过以下方式与您的服务进行通信:
Thread.sleep(35000);
onAccountsUpdated();