I need to get the list of packages of my Android device using Embarcadero Delphi XE10 Seattle
procedure TDeviceInfoForm.Button1Click(Sender: TObject);
var stdout:JOutputStream;
stdin:JInputStream;
suProcess:JProcess;
begin
suProcess:=TJRuntime.JavaClass.getRuntime.exec(StringToJString('pm list packages'));
stdout:=suProcess.getoutputStream;
stdin:=suProcess.getInputStream;
end;
You are going about this the wrong way. You should not be using ADB at all. Use Android's PackageManager
class instead. Its getInstalledPackages()
method returns a List
of PackageInfo
objects, one for each package. Simply loop through that list, eg:
uses
...,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.Helpers;
procedure TDeviceInfoForm.Button1Click(Sender: TObject);
var
list: JList;
iter: JIterator;
pkg: JPackageInfo;
begin
// read the getInstalledPackages() documentation for details about the available flags...
list := TAndroidHelper.Context.getPackageManager.getInstalledPackages(0);
iter := list.iterator;
while iter.hasNext do
begin
pkg := TJPackageInfo.Wrap((iter.next as ILocalObject).GetObjectID);
// use pkg as needed...
end;
end;