我需要使用Embarcadero Delphi XE10 Seattle获取我的Android设备的软件包列表
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;
答案 0 :(得分:2)
你这是错误的方式。您根本不应该使用ADB。请改用Android的PackageManager
课程。其getInstalledPackages()
方法返回List
个PackageInfo
个对象,每个包对应一个。只需遍历该列表,例如:
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;