Loading the app’s icon into a TImage on Android

Working with Delphi for Android, I wanted to load my app’s icon into a TImage. Here’s the code I came up with:

  AndroidApi.JniBridge, AndroidApi.Jni.App, AndroidApi.Jni.GraphicsContentViewText,
  FMX.Helpers.Android, FMX.Surfaces;

function GetAppIcon(Dest: TBitmap): Boolean;
  Activity: JActivity;
  Drawable: JDrawable;
  Bitmap: JBitmap;
  Surface: TBitmapSurface;
  Result := False;
  Activity := SharedActivity;
  Drawable := Activity.getPackageManager.getApplicationIcon(Activity.getApplicationInfo);
  Bitmap := TJBitmapDrawable.Wrap((Drawable as ILocalObject).GetObjectID).getBitmap;
  Surface := TBitmapSurface.Create;
    if not JBitmapToSurface(Bitmap, Surface) then
  Result := True;

procedure TForm1.Button1Click(Sender: TObject);

The slightly awkward manner of casting from a JDrawable to a JBitmapDrawable in the middle is because Java type casts are not supported directly by the Delphi to Java bridge. As such, we have to get a handle to the raw Java object and re-wrap it to the desired derived class… but that’s too much of a faff all told, and the syntax will be familiar with anyone who has used the Delphi to Objective-C bridge before.

2 thoughts on “Loading the app’s icon into a TImage on Android

  1. Pingback: Get Your App Icon With Delphi XE5 Firemonkey On Android And Windows | Delphi XE5 Firemonkey, Delphi Android, Delphi IOS

  2. Pingback: Liens de l’épisode 7 de la saison 3 | Le Dev du Jeudi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s