原文链接: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中缓存图标的代码:下载完整源码