我正在使用android-c2dm,並且我的設備已成功接收來自它的消息。我想調用一個非靜態函數(在一個已經存在的Activity中)來處理這個消息,但是從C2DMBaseReceiver調用它是非法的。我怎樣才能將這些信息傳回活動?Android:如何從C2DMBaseReceiver調用非靜態函數?
編輯:如果我調用一個靜態函數來分配變量(或設置共享首選項),然後調用一個處理程序,它將使用這些變量來做什麼需要做什麼?那是不好的風格?
我正在使用android-c2dm,並且我的設備已成功接收來自它的消息。我想調用一個非靜態函數(在一個已經存在的Activity中)來處理這個消息,但是從C2DMBaseReceiver調用它是非法的。我怎樣才能將這些信息傳回活動?Android:如何從C2DMBaseReceiver調用非靜態函數?
編輯:如果我調用一個靜態函數來分配變量(或設置共享首選項),然後調用一個處理程序,它將使用這些變量來做什麼需要做什麼?那是不好的風格?
你可以做的是將消息細節以某種方式放在一個Intent中(最粗糙的方法是將消息序列化爲一個字符串並將其添加爲一個Intent額外),然後使用startActivity
將該意圖發送到該活動。活動可以檢查額外的東西,知道它是一個消息,提取並反序列化消息,然後去鎮上。
如果您想確保目標活動的現有實例接收到該消息,則可能需要設置適當的啓動模式或意向標誌。
您可以通過onMessage方法從Intent獲取消息,然後在用戶單擊Notification後顯示Notification和startActivity。您可以使用Intent標誌在前景中創建背景活動。 所以如果活動沒有開始 - 如果活動在後臺 - 它將在前臺顯示,並且如果它在前臺 - 它將被啓動 - 那麼我們只需要改變TextView文本。 您也可以在不顯示通知的情況下啓動活動。 你也可以使用onNewIntent(Intent intent)活動方法來改變文本。您可以將來自Google意圖的消息放入onMessage中,並將此消息與FLAG_ACTIVITY_SINGLE_TOP標誌一起放入新的Intent和startActivity中。
我原本忘了包括這個,Activity已經存在。基本上我想在我的服務器收到消息後立即更改文本視圖。 startActivity不適用於它? – 2011-06-15 15:23:42
活動可能不在後臺(不可見)或甚至未啓動。如果活動未開始,則不能更改TextView,因爲在那段時間它不存在。 – 2011-06-15 20:20:44
如果存在活動的實例,則可以使用onNewIntent更新它。 – Femi 2011-06-15 20:30:55