[译] 获取 Andriod 中已经安装的应用程序列表

原文链接:http://www.fmxexpress.com/app-launcher-with-full-source-code-for-delphi-xe7-firemonkey-on-android

在 Andriod 上一个用户或 Delphi XE7 开发者不得不面对的问题是,如果你安装了太多的应用程序,那么你不得不在图标页间切换以找到想要打开的应用程序。一个解决这个问题的演示方案让你很容易的找到正确的应用。你可以输入少量的字符来打开应用来替代在图标页间切换查找。它操作起来类似于 Windows 下的 开始|运行 功能。这个应用让我在 oDesk 上花了 100 美元。

此应用演示了三块不同的功能,包括从设备上读取已安装的应用列表,加载并缓存每个应用的图标和打开应用自身。此程序的这一功能由于使用了 Android 特定的 JNI ,所以只工作在Android上,而不能在其它平台(Windows, IOS, 或者 Mac OSX)。这一代码应该在 AppMethod 上也能工作。下面是 Andriod 的启动一个应用的代码:

procedure TformMain.OpenApp(PackageName, AppName : JString);
var
  Intent : JIntent;
  NativeComponent : JComponentName;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_MAIN);
Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
NativeComponent := TJComponentName.JavaClass.init(PackageName, AppName);
Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Intent.setComponent(NativeComponent);
SharedActivity.startActivity(Intent);
end;

下面的函数枚举设备上安装的应用:

function TformMain.GetActivityAppList: JList;
var
  tempList : JList;
  Intent : JIntent;
Manager : JPackageManager;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_MAIN);
Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
Manager := SharedActivity.getPackageManager;
tempList := nil;
tempList := Manager.queryIntentActivities(Intent, 0);
Result := tempList;
end;

你必需自己下载演示程序来获取从每个App中缓存图标的代码:下载完整源码

分享到: