如何使用简单的意图从 RAD Studio Delphi Android 应用程序启动另一个 Android 应用程序?

问题描述 投票:0回答:1

我正在努力寻找一个使用意图在 Android 上启动另一个应用程序的简单示例。我研究了 SendIntent 和 ReceiveIntent 的示例应用程序,但它们比我需要的更复杂。我已经尝试了一些基于 Android 示例的代码示例,但我正在努力找出是否存在权限问题或其他问题。我最近遇到的事情是,有时你需要手动编辑AndroidManifest.template.xml。

我首先尝试将示例中的 ACTION_VIEW 更改为 CATEGORY_LAUNCHER 。该应用程序似乎总是失败,并显示“未找到接收器”,这意味着它根本找不到我启动所需的包

procedure TForm1.SendTextViaIntent(const AText: string);
var
  Intent: JIntent;
begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.CATEGORY_LAUNCHER);

  if MainActivity.getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_ALL).size > 0 then
    MainActivity.startActivity(Intent)
  else
    ShowMessage('Receiver not found');
end;
android delphi android-intent launch rad-studio
1个回答
0
投票

经过一番努力,我得到了一些基于公认的 Android 代码的东西。

还需要在清单上设置正确的权限,这可以在应用程序->使用权限下完成,查询所有包权限需要设置为True。您可以调用设备上具有启动器功能的任何应用程序。

下面的代码具有适当的用途应该足够了,并且可以通过我正在使用的 SDK 32 进行良好的测试。

uses Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, FMX.Platform.Android;

procedure TfrmMain.Button1Click(Sender: TObject);
var
  Intent: JIntent;

begin
  Intent := MainActivity.getPackageManager.getLaunchIntentForPackage(StringToJString('com.package.launchme'));

  if MainActivity.getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_ALL).size > 0 then
  begin
    MainActivity.startActivity(Intent);
  end
end;

此外,为了确认您想要在设备上定位的包名称,您可以从 SDK platform-tools 文件夹运行此命令:

adb shell pm list packages -3 -f

您应该能够使用

base.apk=

之后列出的任何内容
© www.soinside.com 2019 - 2024. All rights reserved.