rip*_*pel 5 android bundle bitmap parcel parcelable
我想使用AIDL将String和Bitmap传递给服务.服务实现此AIDL方法:
void addButton(in Bundle data);
Run Code Online (Sandbox Code Playgroud)
在我的例子中,Bundle包含一个String和一个Bitmap.
调用应用程序(客户端)具有以下代码:
...
// Add text to the bundle
Bundle data = new Bundle();
String text = "Some text";
data.putString("BundleText", text);
// Add bitmap to the bundle
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.myIcon);
data.putParcelable("BundleIcon", icon);
try {
myService.addButton(data);
} catch (RemoteException e) {
Log.e(TAG, "Exception: ", e);
e.printStackTrace();
}
...
Run Code Online (Sandbox Code Playgroud)
在服务端,我有一个带有以下代码的ButtonComponent类:
public final class ButtonComponent implements Parcelable {
private final Bundle mData;
private ComponComponent(Parcel source) {
mData = source.readBundle();
}
public String getText() {
return mData.getString("BundleText");
}
public Bitmap getIcon() {
Bitmap icon = (Bitmap) mData.getParcelable("BundleIcon");
return icon;
}
public void writeToParcel(Parcel aOutParcel, int aFlags) {
aOutParcel.writeBundle(mData);
}
public int describeContents() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
创建ButtonComponent后,服务使用ButtonComponent对象中的文本和图标创建一个按钮:
...
mInflater.inflate(R.layout.my_button, aParent, true);
Button button = (Button) aParent.getChildAt(aParent.getChildCount() - 1);
// Set caption and icon
String caption = buttonComponent.getText();
if (caption != null) {
button.setText(caption);
}
Bitmap icon = buttonComponent.getIcon();
if (icon != null) {
BitmapDrawable iconDrawable = new BitmapDrawable(icon);
button.setCompoundDrawablesWithIntrinsicBounds(iconDrawable, null, null, null);
}
...
Run Code Online (Sandbox Code Playgroud)
结果,按钮显示正确的文本,我可以看到图标的空间,但没有绘制实际的位图(即文本左侧有一个空白区域).
以这种方式将Bitmap放入Bundle是否正确?
如果我应该使用Parcel(vs一个Bundle)有没有办法在AIDL方法中维护一个'data'参数来保持文本和图标在一起?
附带问题:我如何决定使用Bundles vs Parcels?
非常感谢.
| 归档时间: |
|
| 查看次数: |
9623 次 |
| 最近记录: |