2015-02-07 67 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