如何在 Embarcadero Delphi 中获取 adb shell 命令的结果
How to get the result of adb shell command in Embarcadero Delphi
我需要使用 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;
你的做法是错误的。您根本不应该使用 ADB。使用 Android 的 PackageManager
class instead. Its getInstalledPackages()
method returns a List
of 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;
我需要使用 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;
你的做法是错误的。您根本不应该使用 ADB。使用 Android 的 PackageManager
class instead. Its getInstalledPackages()
method returns a List
of 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;