Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android registerReceiver正在运行等待AlarmManager系统消息的服务_Java_Android_Broadcastreceiver_Alarmmanager - Fatal编程技术网

Java Android registerReceiver正在运行等待AlarmManager系统消息的服务

Java Android registerReceiver正在运行等待AlarmManager系统消息的服务,java,android,broadcastreceiver,alarmmanager,Java,Android,Broadcastreceiver,Alarmmanager,我有正在运行的服务,包括广播接收器。 我需要广播接收器从报警管理器发出的系统计时器时钟中断中获取消息。 这背后的主要思想是,当用户关闭应用程序时,服务将继续监听,直到时间中断发生。 我不知道它为什么不起作用:请问如何纠正它 主要活动: service.registerRecvierForAlarm(); Intent intent = new Intent(Send.this, SmsReciverService.class); intent.setAction("intent_myactio

我有正在运行的服务,包括广播接收器。 我需要广播接收器从报警管理器发出的系统计时器时钟中断中获取消息。 这背后的主要思想是,当用户关闭应用程序时,服务将继续监听,直到时间中断发生。 我不知道它为什么不起作用:请问如何纠正它

主要活动:

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来创建PendingEvent,而不是GetBroadcast来创建PendingEvent,以便BroadcastReceiver使用AlarmManager启动服务:

如果需要使用AlarmManager触发BroadcastReceiver,则使用类名创建意图,该类名将BroadcastReceiver扩展为意图构造函数的第二个参数:

Intent intent = new Intent(Send.this, SmsReciverBroadcast.class);
                                       ^^^^^^
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);

我知道这一点,但我不想在以后启动该服务,该服务一直在运行。我需要该服务使用broadcastReceiver侦听系统。@StavBodik:然后使用broadcastReceiver名称创建意图请参见我的编辑answer@StavBodik:但对于broadcastReceiver,您可能需要通过扩展broadcastReceiver来创建Receiver,并在AndroidManifest中注册自定义操作意图\u myaction\u报警,而不是注册动态使用RegisterReceiver这正是我正在做的问题是我的类SmsReciverBroadcast扩展服务,它是一个具有BroadcastReceiver的服务。@StatBodik:确定,然后作为Intent Intent=new IntentSend.this,ReceiverAlarm.class尝试它;
Intent intent = new Intent(Send.this, SmsReciverBroadcast.class);
                                       ^^^^^^
intent.setAction("intent_myaction_alarm");
PendingIntent pintent = PendingIntent.getBroadcast(Send.this, 0, intent, 0);