2014-01-25 173 views
1

我有一個包含許多活動的應用程序。將廣播發送到不在活動堆棧中的活動

應用程序的狀態是由數據保存我通過Web服務

在同一時間或其他從互聯網的接受,我的web服務會告訴我,我需要進行登錄,之後我已經登錄,在過去和登錄活動不在活動堆棧上。

我想,當我收到信息重新登錄(在http相關的類),發送廣播到系統,打開登錄活動。

這個廣播到達時,我需要在哪裏註冊這個廣播接收器,因爲我可能在任何活動中?

+1

在清單 – cYrixmorten

+0

廣播接收器,如果它不依賴於應用程序中的任何組件使它在清單中,它將監聽如果應用程序不活躍的動作 –

+0

**「我的web服務會告訴我,我需要執行登錄「** - 它是如何告訴你的?另外,你所需要做的就是使用'startActivity(...)'開始登錄活動? – Squonk

回答

0

如果你不知道先驗Activity將運行時發出的信號,最好的辦法是將其定義在Manifest文件,像這樣:

<receiver android:name="YourReceiver" > 
    <intent-filter> 
    <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
0

您可以註冊廣播接收器在AndroidManifest.xml這樣

<receiver android:name=".YourBroadcastReceiver" android:exported="false"> 
    <intent-filter> 
    <action android:name="YOUR_PACKAGE_NAME.INETENT_NAME" /> 
    </intent-filter> 
</receiver> 

如果你的廣播僅用於處理內部的意圖,一定要聲明爲exported false別的一些其他應用程序可以隨時通過發送廣播中斷並打開您的登錄。

編輯:

這名與包名的BroacastReceiver的確切路徑。如果它駐留在你的主包中,點(。)就足夠了,因爲引用是從清單標籤內部定義的包中獲取的,但是如果它駐留在像yourcommonapppackage.broadcastreceiver.YourBroadcastReceiver這樣的其他包中,則必須相應地給出名稱。

您可以給出是否滿滿包裝或參考您的主包裝。

+0

我試過了,但廣播似乎沒有收到 –

+0

也許我錯過了什麼?我把這段代碼放在清單中,聲明瞭一個具有相同名稱的類,並將邏輯寫入其中,然後我將Intent intent = new Intent(「THE_NAME_OF_THE_ACTION」); context.sendBroadcast(意向); –

+0

@LenaBru是您的根接口應用程序包中的BroadcastReceiver,它在mainifest中的第一行中定義。如果不在名稱屬性中添加像在我的清單中的'.yourreceiver.YourBroadcastReceiver' – pyus13