2011-03-11 28 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您的服务或其他工艺或任何你大厦通过这个实例。

只是另一种选择......

相关问题