2015-02-07 68 views
0

我正在运行包含广播接收器的服务。 我需要广播接收器从Alarm Manager所做的系统定时器时钟中断中获取消息。 这背后的主要思想是,当用户关闭应用程序时,服务将继续收听,直到时间中断发生。 我不知道为什么它不能正常工作):请问如何改正它?Android registerReceiver内部运行服务,等待AlarmManager系统msg

主要活动:

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

回答

0

SmsReciverService是服务,所以你需要使用getService()创建PendingIntent,而不是getBroadcast(用于对广播接收器创建的PendingIntent)用来启动服务AlarmManager

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

OR

,如果你需要使用AlarmManagerBroadcastReceiver然后使用该扩展BroadcastReceiver作为第二个参数意图构造类名创建意图火:

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

我知道这一点,但我不想启动的服务在以后的时间里,这项服务正在运行。我需要该服务以broadcastReceiver方式收听系统。 – 2015-02-07 16:49:14

+0

@StavBodik:然后创建意图使用broadcastReceiver名称请参阅我的编辑答案 – 2015-02-07 16:51:26

+0

@StavBodik:但对于broadcastReceiver可能需要通过扩展'BroadcastReceiver'并在'AndroidManifest'中用自定义操作'intent_myaction_alarm'注册来创建Receiver,而不是使用' registerReceiver' – 2015-02-07 16:53:34