Search code examples
javaandroidbroadcastreceiveralarmmanager

Android registerReceiver Inside runing service that waiting for AlarmManager system msg


I have running service which includes broadcast receiver . I need the broadcast receiver to get the message from system timer clock interrupt that Alarm Manager made. The main idea behind this is that when user close the app the service will continue listening until time interrupt happens . I dont know why its not working ): how to do it correct please ?

Main 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);

Service :

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);
}

Solution

  • SmsReciverService is service so you need to use getService() to create PendingIntent instead of getBroadcast(used for creating PendingIntent for BroadcastReceiver) to start Service using AlarmManager :

    PendingIntent pintent = PendingIntent.getService(Send.this, 0, intent, 0);
    

    OR

    if you need to fire BroadcastReceiver using AlarmManager then creating Intent by using class name which is extending BroadcastReceiver as second parameter to Intent constructor :

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