2015-04-01 42 views
0

我有兩個類:一個是活動,另一個是從NotificationListenerService派生的類。活動如何從服務中獲取價值?

我需要該活動能夠獲取設備的中斷過濾器設置的初始值,然後在它發生變化時收到通知。

因此,當中斷過濾器的值發生變化時,活動正在監聽由NLS進行的廣播。 但是,我需要獲得中斷過濾器的初始值 - 如果用戶永遠不會更改此值,那麼我的活動將永遠不會獲得廣播,因此它永遠不會找出該值。

所以我的問題是活動如何從服務請求一個值?

請注意,NotificationListenerService是由操作系統啓動的,它不是我的活動創建和啓動的東西。

回答

0

您可以使用SharedPreferences來存儲某個值(在服務中),並且您的活動可以通過從SharedPreferences中加載值來根據它進行操作。
你也可以使用EventBus並使用它傳遞一些事件。方式應該是這樣的:
- 您的活動註冊EventBus捕獲一些特殊的事件,而不是NLS。 - 通知服務在需要時生成併發布事件。它還打包你的活動需要到事件 任何數據 - 您的活動從NS抓住新的事件,並從中獲得數據:

public void onEvent(final FriendsRenameEvent event) { 
    Log.i(this, "onEvent() FriendsRenameEvent event"); 
    if (event.isActionSucced) 
     listAdapter.notifyDataSetChanged(); 
} 

事件僅僅是一個simeple類(擴展對象):

public class FriendsRenameEvent { 

    public final boolean isActionSucced; 

    public FriendsRenameEvent(final boolean isSucced/*, final Contact rejectedContact*/) { 
     this.isActionSucced = isSucced; 
    } 
} 
使用它的這樣的(一個GCMIntenService的一部分)GCM

林:

private void handleMessage(final Bundle gcmBundle) { 
    if (gcmBundle == null) { 
     Log.e(this, "handleMessage(): Received null-gcmBundle in GCMIntentService.onReceive()!"); 
     return; 
    } 

    Log.i(this, "handleMessage(): gcmBundle: " + gcmBundle); 

    EventBus.getDefault().post(new IncomingGCMEvent(gcmBundle)); 
} 

而在活動:

public void onEventMainThread(final IncomingGCMEvent event) { 
    final String payloadMessage = event.gcmBundle.getString("collapse_key"); 
    ... 
} 

此外還有一個綁定機制將服務和活動綁定在一起。使用Bind接口,你可以像Activity的自己的方法一樣從一個Activity中運行一個Sevice的方法。

+0

通過廣播發布內容的服務如何與通過事件發佈內容不同?我的意思是它仍然是一個推動設計,但我需要拉動活動。或者事件總線可以提供拉式功能?感謝關於SharedPreferences的建議,這可能是一個簡單的解決方案。 – Gruntcakes 2015-04-01 20:26:27

+0

NotificationListenerService可以預先設置一個事件,並且您的Activity捕獲該事件。不需要拉動。你可以在事件中包含任何你想要的東西。所以當Activity收到事件時,它可以從中「拉出」所需的數據。你有沒有嘗試過EventBus?如果不嘗試,我會鏈接它的GitHub – Stan 2015-04-01 20:32:48

+0

NLS看起來很特別 - 只有操作系統可以綁定它。並且NLS在活動創建之前由操作系統啓動,因此活動沒有機會設置監聽等,以及時捕獲服務的初始輸出(否則服務可以通過廣播或一個事件等onListenerConnected,但這太早,它會被活動所錯過)。 – Gruntcakes 2015-04-01 20:37:57

相關問題