Reputation: 1
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
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