2011-04-28 26 views
0

我有一個應用程序,只有兩個活動,主要活動和PreferenceActivity。當狀態發生變化時(飛行模式開啓或關閉,GPS開啓和關閉等),我想更新這兩個活動。如何使用BroadcastReceiver更新兩個活動?

我需要更新一些變量,只有當應用程序被激活的UI,所以我想這是更好的代碼,而不是在應用程序清單來註冊接收器。

正如我不希望在每個活動複製代碼,我試圖把廣播接收器在它自己的類。不過,我發現我無法註冊BroadcastReceiver。有沒有解決這個問題的方法?

三江源,梅爾

public class melsBigListener { 


IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE"); 
BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //TO DO Update both my main activity and the preference activity 
     //TO DO deal with different intents via switch statement... 
    } 

}; 

//registering as receiver(like below) can not work 
//registerReceiver(receiver, intentFilter);} 

Relevant post:RegisterBroadcastReceiver in Manifest.xml setting or by implement source code

回答

0

我建議註冊接收器的清單,並用它來改變存儲在一個首選項文件變量(應用程序是否正在運行或不),然後查詢需要時的狀態偏好。

但是,您可以擴展Application並在Application.onCreate()方法中的代碼中註冊接收器。

0
registerReceiver(receiver, intentFilter); should be in some method. 

melsBigListener應該延伸活動,或者您需要活動上下文傳遞給這個類,並用它來registerReceiver。而不是做這種無聊的東西

最好是寫在menifest文件中註冊接收器。

0

BroadcastReceivers應該工作作爲正在使用該清單文件註冊到手機的擴展類。我不太確定它是如何作爲活動中的實例化類來工作的。由你的代碼判斷到目前爲止,意圖將永遠不會被Activity和你的BigListener類接收,因爲意圖過濾器從來沒有在清單中聲明。

解決你的問題:1。 創建myBroadcastReceiver,從廣播接收器延伸,在清單 2.申報所需的意圖創建一個所有MyApplication,從應用 3.延長使用活動的onCreate,的onDestroy,onStartCmd, onPause等,通過在myApplication中切換變量來管理「僅當應用程序處於活動狀態時」部分。 4.使用myBroadcastReceiver到讀出(3)每次接收的意圖,決定變量,如果你「需要更新一些變量」和相應的更新。由於這些變量是由你2個活動共享變量應該在所有MyApplication類裏面放

相關問題