Android registerReceiver 内部正在运行的服务,等待 AlarmManager 系统消息
Android registerReceiver Inside runing service that waiting for AlarmManager system msg
我有 运行 服务,其中包括广播接收器。
我需要广播接收器从警报管理器发出的系统定时器时钟中断中获取消息。
这背后的主要思想是,当用户关闭应用程序时,服务将继续监听,直到时间中断发生。
我不知道为什么它不起作用 ):请问如何正确?
主要 Activity :
service.registerRecvierForAlarm();
Intent intent = new Intent(Send.this, SmsReciverService.class);
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, time, pintent);
服务:
public void registerRecvierForAlarm(){
IntentFilter intentFilter = new IntentFilter("intent_myaction_alarm");
this.ReceiverAlarm = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("message recived");
}
};
this.registerReceiver(this.ReceiverAlarm,intentFilter);
}
SmsReciverService
是服务,因此您需要使用 getService()
来创建 PendingIntent
而不是 getBroadcast
(用于为 BroadcastReceiver 创建 PendingIntent)以使用 [= 启动服务16=]:
PendingIntent pintent = PendingIntent.getService(Send.this, 0, intent, 0);
或
如果您需要使用 AlarmManager
触发 BroadcastReceiver
,然后使用 class 名称创建 Intent,该名称将 BroadcastReceiver
作为第二个参数扩展到 Intent 构造函数:
Intent intent = new Intent(Send.this, SmsReciverBroadcast.class);
^^^^^^
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);
我有 运行 服务,其中包括广播接收器。 我需要广播接收器从警报管理器发出的系统定时器时钟中断中获取消息。 这背后的主要思想是,当用户关闭应用程序时,服务将继续监听,直到时间中断发生。 我不知道为什么它不起作用 ):请问如何正确?
主要 Activity :
service.registerRecvierForAlarm();
Intent intent = new Intent(Send.this, SmsReciverService.class);
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, time, pintent);
服务:
public void registerRecvierForAlarm(){
IntentFilter intentFilter = new IntentFilter("intent_myaction_alarm");
this.ReceiverAlarm = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("message recived");
}
};
this.registerReceiver(this.ReceiverAlarm,intentFilter);
}
SmsReciverService
是服务,因此您需要使用 getService()
来创建 PendingIntent
而不是 getBroadcast
(用于为 BroadcastReceiver 创建 PendingIntent)以使用 [= 启动服务16=]:
PendingIntent pintent = PendingIntent.getService(Send.this, 0, intent, 0);
或
如果您需要使用 AlarmManager
触发 BroadcastReceiver
,然后使用 class 名称创建 Intent,该名称将 BroadcastReceiver
作为第二个参数扩展到 Intent 构造函数:
Intent intent = new Intent(Send.this, SmsReciverBroadcast.class);
^^^^^^
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);