Tôi muốn chuyển một chuỗi và một bitmap đến một dịch vụ bằng AIDL. Dịch vụ triển khai phương thức AIDL này:Đặt một bitmap vào một gói
void addButton(in Bundle data);
Trong trường hợp của tôi, Gói chứa chuỗi và bitmap.
Ứng dụng gọi điện thoại (khách hàng) có mã này:
...
// 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();
}
...
Trên cuối dịch vụ, tôi có một lớp ButtonComponent với mã này:
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;
}
}
Sau khi tạo một ButtonComponent, Dịch vụ tạo nút sử dụng văn bản và biểu tượng từ đối tượng 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);
}
...
Là kết quả là, nút được hiển thị với văn bản chính xác và tôi có thể thấy không gian cho biểu tượng, nhưng bitmap thực tế không được vẽ (tức là có một khoảng trống ở phía bên trái của văn bản).
Có đúng để đặt một bitmap vào một gói theo cách này không?
Nếu tôi nên sử dụng Bưu kiện (so với gói) có cách nào để duy trì một đối số 'dữ liệu' duy nhất trong phương pháp AIDL để giữ văn bản và biểu tượng cùng nhau không?
Câu hỏi phụ: Làm cách nào để quyết định sử dụng Gói và Bưu kiện?
Rất cám ơn.
Cảm ơn bạn. Trong kịch bản bitmap của tôi là ~ 900 byte, có lẽ là một kích thước hợp lý, và tôi muốn tránh bao gồm tất cả chúng trong APK của dịch vụ (có thể có nhiều khách hàng khác nhau). Nếu tôi sử dụng một ID duy nhất, tôi đoán cả gói của khách hàng và dịch vụ sẽ chứa PNG thực tế ... phải không? – rippeltippel
tất cả các hình ảnh của bạn nên được chứa trong thư mục '/ res/drawable' –