Peturz
Peturz

Reputation: 1

Get installed application list

Is it possible to get currently installed application list on an Android phone?

Currently I have tried to check if the app is installed which it is, but I need to get all of the installed applications in a StringList

function TForm2.IsAppInstalled(const AAppName: string): Boolean;
var
   PackageManager: JPackageManager;
begin
PackageManager := SharedActivity.getPackageManager;
try
   PackageManager.getPackageInfo(StringToJString(AAppName), 
   TJPackageManager.JavaClass.GET_ACTIVITIES);
   Result := True;
except
   on Ex: Exception do
      Result := False;
end;
end;
{$ENDIF}

procedure TForm2.Button1Click(Sender: TObject);
begin
Label1.Text := BoolToStr(IsAppInstalled('com.test.project1'), True);
end;

Upvotes: 0

Views: 398

Answers (1)

Dave Nottage
Dave Nottage

Reputation: 3602

This should solve it:

uses
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNIBridge;

function IsAppInstalled(const APackageName: string): Boolean;
var
  LIntent: JIntent;
  LList: JList;
  LApplicationInfo: JApplicationInfo;
  I: Integer;
begin
  Result := False;
  LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MAIN);
  LIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
  LIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
  LList := TAndroidHelper.Context.getPackageManager.queryIntentActivities(LIntent, 0);
  for I := 0 to LList.size - 1 do
  begin
    LApplicationInfo := TJResolveInfo.Wrap(JObjectToID(LList.get(I))).activityInfo.applicationInfo;
    if (LApplicationInfo.flags and TJApplicationInfo.JavaClass.FLAG_SYSTEM) = 0 then
    begin
      if APackageName = JStringToString(LApplicationInfo.packageName) then
        Exit(True);
    end;
  end;
end;

Upvotes: 2

Related Questions