我正在尝试从statusbarService.java获取通知扩展视图,并通过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 :(得分:0)
这只是一个想法,但您可以创建一个AIDL接口来包装您的View实例。所以我们假设该视图具有以下公共方法。你不能对私人做很多事情。
int getWidth()
int getHeight()
String getFoo()
使用基本相同的方法创建一个aidl接口。然后,您可以新建一个aidl接口的实现。当你这样做时,你将不得不实现该aidl接口的方法。对于每个人,您只需在实际视图上调用相应的方法。所以...
类似这样的事情
new view_interface(){
int getWidth(){
return view.getWidth();
}
// and so on ...
};
然后,您可以通过aidl将此实例传递给您的服务或其他进程或任何建筑物。
只是另一种选择......