2011-03-11 111 views
0

我想從statusbarService.java中獲取通知展開視圖,並通過aidl服務將其傳遞給另一個應用程序。如何通過aidl傳遞視圖實例

-frameworks/base/services/java/com/android/server/status/StatusBarService.java 

private void makeStatusBarView(Context context) { 
    Resources res = context.getResources(); 
    mRightIconSlots = res.getStringArray(com.android.internal.R.array.status_bar_icon_order); 
    mRightIcons = new StatusBarIcon[mRightIconSlots.length]; 

    **ExpandedView expanded** = (ExpandedView)View.inflate(context, 
      com.android.internal.R.layout.status_bar_expanded, null); 
} 

我想這個「擴展」視圖實例通過服務來存儲並把它傳遞給任何人誰通過AIDL結合的服務。

  • 我寫了一個服務類。但我不知道如何將此視圖傳遞給服務實例。 要綁定到服務,它必須是活動或服務。 StatusBarService.java不是兩者都有。所以我不知道如何將這個視圖實例傳遞給一個服務。

  • 假設如果以某種方式將視圖實例傳遞給服務,我需要通過aidl將視圖實例傳遞給綁定它的任何人。所以我知道我需要編寫一個parcelabale類,它將View作爲成員並返回parcelable類實例。

  • 我不知道如何通過parcel編寫視圖實例。有什麼建議麼? 我認爲可以使用字節數組。任何人都知道如何轉換視圖實例並寫入字節數組?

+0

你有沒有試圖返回你需要的視圖,並在您的活動只是設置視圖像往常一樣設置數據?因此,你避免通過視圖。據我所見,你只需要返回資源,對吧? – 2011-09-04 17:14:15

回答

0

我想尼古拉想說的是,不是通過實際查看比如,你可以隨時通過它的狀態,而不是。這種複雜性取決於視圖的複雜性。例如,如果你有一個數據庫連接,那麼你也需要傳遞它的狀態。對於View類中不是Parcelable的所有數據成員本身也是如此。

一旦您在AIDL接口的另一端收到狀態,yiu可以簡單地重建View類的新實例。

0

這只是一個想法,但您可以創建一個AIDL接口來包裝您的View實例。所以我們可以說這個視圖有下面的公共方法。你不能對私人事業做很多事情。

int getWidth() 
int getHeight() 
String getFoo() 

使用基本相同的方法創建一個aidl接口。然後你可以創建一個aidl接口的實現。當你這樣做時,你將不得不實現這個aidl接口的方法。對於你們中的每一個,您只需在實際視圖中調用相應的方法。所以......

像這樣

new view_interface(){ 
    int getWidth(){ 
     return view.getWidth(); 
    } 
// and so on ... 
}; 

然後,您可以在AIDL您的服務或其他工藝或任何你大廈通過這個實例。

只是另一種選擇......