2011-04-24 22 views
0

我正在寫報警代碼並使用廣播接收器。我能夠接收廣播接收器。但現在我想回到調用活動並更新我的活動的UI。我無法做到這一點。 我在我的活動中使用了以下代碼,但它永遠不會執行該代碼。當廣播接收器觸發報警時,更新呼叫活動的UI或開始新的活動

private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "I am back!!", Toast.LENGTH_LONG).show(); 
    } 
    }; 


    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     unregisterReceiver(myBroadcastReceiver); 
    } 

    @Override 
    protected void onResume() 
    { 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter("com.test.Main"); 
     registerReceiver(myBroadcastReceiver, intentFilter); 
    } 
在我已經包括以下清單文件

,這裏gotAlarm是廣播接收文件

<receiver android:name=".gotAlarm" 
     android:enabled="true"> 
     </receiver> 

gotAlarm文件是其中一個會從報警的未決意圖稱爲設置

public class gotAlarm extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent){ 
    Toast.makeText(context, "Wake Up!!", Toast.LENGTH_LONG).show(); 

    } 
} 

可能是我缺少一些非常基本的東西。 請幫忙。

+0

這是一個鬧鐘代碼,我試圖更新活動的UI,如果它在前臺。如果不是,那麼只要它打開並且滿足某些條件,就應該更新它自己。現在我正在專注於第一部分,即每當有鬧鐘時間時它應該更新UI。我知道這是可行的,因爲很多人可能成功地做到了。但我在這裏修復: - | – 2011-04-24 19:37:05

+0

當我第一次啓動我的應用程序時,我看到onResume()方法正在調用。之後,當警報不是onPause()或onResume被調用時。 – 2011-04-25 04:05:05

+0

我現在改變了我的方法。因爲我沒有發現它正在運行: - |現在,我正在將數據從活動發送到廣播,然後從此廣播中啓動新活動並將數據傳遞到此新活動。我會很快發佈代碼。 – 2011-04-26 07:18:03

回答

1

我放棄了這種方式,我開始接收廣播的新活動。我正在將來自呼叫活動的信息數據發送到廣播和從廣播到下一個活動。這已經達到了目的。

0

您是否register your BroadcastReceiver(您可以在您的活動的'onResume'方法中執行此操作)?另外,您應該在'onPause'方法中使用unregister your BroadcastReceiver

+0

不,我沒有。讓我試試看,我會盡快回復你。 – 2011-04-24 19:05:04

+0

@Lucas:我已經完成註冊並取消註冊,但沒有運氣:( – 2011-04-24 19:21:53

+0

嘿,我必須在onPause()和onResume()代碼中添加更多代碼嗎? – 2011-04-24 19:25:30

1

兩件事情:

  1. 如果動態地註冊通過Context.registerReceiver接收器(),那麼當活動被暫停(或停止或不運行)您將不會收到廣播。如果您需要在活動暫停時接收廣播,則創建一個頂級BroadcastReceiver類(與您的內部類相對)並使用<receiver>進行註冊。

  2. BroadcastReceiver生命週期docs state BroadcastReceiver對象僅在處理onReceive()時處於活動狀態。您不能執行任何異步任務,如顯示對話框等。在您的情況下(活動可能沒有運行並且您收到廣播),您應該使用NotificationManager通知用戶發生的事情。

+0

「然後創建一個頂級的BroadcastReceiver類(而不是你的內部類)」我知道了,但是你能爲此提供任何示例代碼嗎? – 2011-04-24 19:17:07

+0

我已經在清單中使用標記。我想你很瞭解我的問題。因爲即使活動暫停,我也需要得到我在示例中寫的Toast。 – 2011-04-24 19:21:14

+0

你能發表你的''標籤的發佈內容嗎? – 2011-04-24 19:35:30

相關問題