2012-12-31 63 views
0

我寫了一個擴展BroadcastReceiver的自動啓動類。這從每次重新啓動時開始。這個班裏有一些意圖和警報管理員。一切都運行完美。現在我添加了「首選項」以啓用/禁用此類。問題是:當我禁用這個類(使用IF/ELSE),並且稍後啓用它時,我必須重新啓動移動設備。BroadcastReceiver自啓動啓用

如何解決此問題?

public void onReceive(Context context, Intent intent) { 

Calendar cal1 = Calendar.getInstance(); 
[...] 

Intent intent2 = new Intent(context, AlarmReceiver.class); 
[...] 

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
[...] 
+1

您可以在'onRecieve()'中檢查首選項,如果首選項設置爲禁用,則不執行任何操作。另外,使用另一個自定義定義的廣播,讓您按需觸發此代碼。 (當你啓用) –

+0

好的謝謝,我看到:public abstract void onReceive(Context context,Intent intent)。我能舉一個例子嗎?謝謝! –

回答

2

的問題是:當我禁用此類(使用的if/else),後來啓用它,我必須重新啓動手機。

將您在啓動時執行的代碼移到某處的靜態方法中。從引導時間BroadcastReceiver和您的「啓用此邏輯」代碼路徑調用該代碼。

+0

姆姆...所以,我需要創建另一個BroadcastReceiver,並把它放在這個代碼? –

+1

@PolHallen:可能不是。我的回答當然不會這麼說。 「靜態方法」不是「BroadcastReceiver」。你已經有一個'BroadcastReceiver'(「一個擴展BroadcastReceiver的類自動啓動」)。你只需要讓'BroadcastReceiver'的*業務邏輯*可以在其他地方訪問,並且在大多數情況下,一個簡單的解決方案就是將你的'onReceive()'方法的內容移動到一個靜態方法中,該方法的'onReceive() '調用(並可以從別處調用)。 – CommonsWare

+0

好吧,我理解你的話,理論上,謝謝。但在實踐中,它是如何做到的?我能舉個例子嗎?謝謝! –

相關問題