2013-12-23 33 views
0

我是新來問的,所以我希望我的問題得到正確的詢問。提前致謝!從AlarmManager調用的BroadcastReceiver上的Activity調用方法

我的問題是:

一個BroadcastReceiver通過這種方式AlarmManager稱爲一個方法相同BroadcastReceiver內:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, Receiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, 
      System.currentTimeMillis(), 5000, pi); 

onRecieve工作,直到我把那裏從MainActivity方法。當調用的代碼,每次我得到這個錯誤的AlarmManager嘗試啓動的onReceive:如果我上創建臨危MainActivityBroadcastReceiver的方法

12-22 21:56:01.020: W/BroadcastQueue(2192): Unable to launch app com.example/10000 for broadcast Intent { flg=0x14 cmp=com.example/.Receiver (has extras) }: process is bad 

,我可以打電話從MainActivity該方法中的方法BroadcastReceiver:

public void SetHandler(Context context, MainActivity main) { 
    MainActivity mainactivity; 
this.mainactivity = main; 
mainactivity.method(); 
}  

但我不明白如何在BroadcastReceiver的onReceive內調用它們。

mainactivity.method() onRecieve不起作用,我不知道是不是因爲它沒有附加到MainActivityAlarmManager或者是因爲我做錯了。

如果問題是由於活動與BroadcastReceiver的附件,它是如何完成的? 如果這不是問題,它會是什麼?

回答

1

註冊您的BroadcastReceiver的活動,並創建一個IntentService把它放在AlarmManager,並在服務的handleIntent功能發送braodcast所提供的IntentFilter,你將能夠調用的活動方法onReceive

0

我有這個process is bad錯誤,我不得不保留我的FCM服務出口。 增加:

android:exported="true" 

或移除導出= 「假」完全。

我服務,現在看起來是這樣的:

<service 
     android:name=".service.MyFirebaseMessagingService" 
     android:exported="true" 
     > 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
     </intent-filter> 
    </service> 
    <service 
     android:name=".service.MyFirebaseInstanceIdService" 
     android:exported="true" 
     > 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
     </intent-filter> 
    </service> 

希望這有助於你。

相關問題