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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Antwort auf deine zweite Frage.
Quelle : http://www.anddev.org/general-f3/bundle-vs-parcel-vs-message-t517.html
Gelöst.
Problem war, dass die PNG war ich verwenden, ist nicht unterstützt von Android.
Der code:
null zurück.
Während gt_ebuddy gibt eine nette Antwort, ich habe nur eine kleine Randnotiz zu deiner Frage:
Problem: Sie versuchen, passieren Sie eine
Bitmap
Objekt auf Speicher, es kann in Ordnung sein, aber es ist absolut nicht gut zu passieren vieleBitmap
Objekte wie dieses. Wirklich schlechte Praxis.Meine Lösung: Das Bild ist bereits in
resources
ist, hat es eine einzigartigeID
; nutzen aus ihm heraus. Anstatt zu versuchen, an eine Menge von schwerenBitmaps
können Sie IhreID
mitBundle
oderParcel
, aberBundle
ist vorzuziehen, für einen einfachen Daten-Struktur./res/drawable
Verzeichnis