根据this article,如果我需要在某些活动打开时从我的数据库中实现自动删除某些行(早于当前时间),我必须使用ResultReceiver:
ResultReceiver - 用于在服务和活动之间发送结果的通用回调接口。如果您的服务只需要在一个地方与其父应用程序连接,请使用此方法。
和AlarmManager:
在将来的指定时间或以经常性间隔触发
但我面临的问题是我不知道如何将AlarmManager与ResultReceiver一起使用。我的意思是我不明白如何从Activity调用我的IntentService。
在我的Intent服务中,我有类似的东西:
@Override
protected void onHandleIntent(Intent intent) {
Log.d(LOG_TAG, "Inside onHandleIntent");
ResultReceiver rec = intent.getParcelableExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER);
int rowsDeleted = notificationService.deleteAllOld(Calendar.getInstance().getTimeInMillis());
Bundle bundle = new Bundle();
bundle.putString(IntentConstants.UPDATE_REMINDERS_SERVICE_NOTIFICATIONS_DELETED, "Rows deleted: " + rowsDeleted);
// Here we call send passing a resultCode and the bundle of extras
rec.send(Activity.RESULT_OK, bundle);
}
在活动中:
// Starts the IntentService
public void onStartService() {
Log.d("UpdateRemindersLog", "Inside onStartService");
final Intent i = new Intent(this, UpdateRemindersService.class);
i.putExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER, remindersReceiver);
startService(i);
}
我尝试在onStartService方法中实现AlarmManager,但它不起作用。我以为它会是这样的:
Intent intent = new Intent(getApplicationContext(), UpdateRemindersReceiver.class);
intent.putExtra(IntentConstants.UPDATE_REMINDERS_SERVICE_RECEIVER, remindersReceiver);
// Create a PendingIntent to be triggered when the alarm goes off
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, UpdateRemindersService.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long firstMillis = System.currentTimeMillis(); // alarm is set right away
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 10*1000, pendingIntent);
那么,有人可以解释一下我如何使用IntentService实现AlarmManager吗? 谢谢。
答案 0 :(得分:0)
该方法建议,PendingIntent.getBroadcast()
呼叫的目标需要是广播接收者。 AlarmManager
仅适用于那些Intent
。
因此,您需要添加处理AlarmManager
信号的广播接收器,然后启动您的服务:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Start your service here
}
}
另外,请记住在AndroidManifest.xml
文件中注册您的接收者,例如application
标记内的
<receiver
android:name=".AlarmReceiver"
android:enabled="true" />
当您创建Intent
时,您现在应该定位新的接收器类(AlarmReceiver.class
)。