我正在努力寻找一个使用意图在 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 代码的东西。
还需要在清单上设置正确的权限,这可以在应用程序->使用权限下完成,查询所有包权限需要设置为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=
之后列出的任何内容