如何在Embarcadero Delphi中获得adb shell命令的结果

时间:2015-11-30 16:44:29

标签: android delphi adb

我需要使用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;

1 个答案:

答案 0 :(得分:2)

你这是错误的方式。您根本不应该使用ADB。请改用Android的PackageManager课程。其getInstalledPackages()方法返回ListPackageInfo个对象,每个包对应一个。只需遍历该列表,例如:

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;