Setzen Sie eine Bitmap in einem Bundle

Möchte ich übergeben Sie einen String und eine Bitmap, um einen Dienst mittels AIDL. Der Dienst implementiert, das AIDL-Methode:

void addButton(in Bundle data);

In meinem Fall, wird das Bundle enthält eine Zeichenfolge und eine Bitmap.

Der aufrufenden Anwendung (client) hat diesen code:

...
//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();
}
...

Auf das service-Ende habe ich einen ButtonComponent Klasse mit diesem code:

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;
    }
}

Nach dem erstellen eines ButtonComponent, der Service erstellt eine Schaltfläche mit dem text und ein Symbol aus der ButtonComponent Objekt:

...
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);
}
...

Als ein Ergebnis, wird die Schaltfläche angezeigt wird, mit dem richtigen text und ich kann sehen, dass der Platz für das Symbol, aber die eigentliche bitmap ist nicht gezeichnet (d.h. es gibt einen leeren Platz auf der linken Seite des Textes).

Ist es richtig, setzen Sie ein Bitmap in ein Bundle in dieser Art und Weise?

Wenn ich sollte ein Paket (vs Bundle) gibt es eine Möglichkeit, die Verwaltung eines einzigen "Daten" - argument in der AIDL-Methode, um text und icon zusammen?

Seite Frage: Wie kann ich entscheiden, zu verwenden, Bundles vs Paketen?

Vielen Dank.

InformationsquelleAutor rippeltippel | 2011-10-11
Schreibe einen Kommentar