应用内应用

15

是否可能从另一个应用程序中运行一个应用程序?我想要做的是编写一个应用程序,允许您选择要启动的应用程序,然后在视图中显示此应用程序的活动。

因此,在横向模式下,它应该看起来像这样:

enter image description here

背后的想法是:

我想能够启动和运行第三方活动以及我的活动,并且我想能够使用我的活动创建控制第三方活动的个别宏。

基本上,就像这样:

  • 从我的应用程序内部启动第三方活动
  • 开始宏记录
  • 在第三方活动中做一些事情
  • 停止宏记录
  • 随时使用宏

那么我如何从我的活动中启动和控制另一个活动呢?


不可能的。尝试使用Fragments https://developer.android.com/training/basics/fragments/index.html - resource8218
8
既然你说这不可能,为什么碎片还能帮助我呢? - PKlumpp
4
可以从自己的应用程序中启动另一个应用程序,但不能在"视图"中启动。 - Braj
好的,这是一个很好的方法,谢谢!现在我把视图的想法踢出我的脑海。那么我该往哪个方向走呢? - PKlumpp
1
你能控制这些其他应用程序吗?你希望该应用程序能够做什么?为什么该应用程序需要在你的应用程序内部,你想要看到菜单,还是只是返回菜单?你能描述一下实际的用例吗? - Nanne
显示剩余2条评论
4个回答

21

非Root:
遗憾的是,想要在不进行手机Root的情况下实现您所需的功能似乎是不可能的,因为您只能通过意图与其他应用程序交互。由于开发人员可以决定他们的应用程序如何针对特定意图做出反应,因此通过这种方式创建宏几乎是不可能的。

已Root的手机:

  1. 您可能想要创建所有已安装应用程序的列表,您可以使用

    getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);
    

    获取所有已安装应用程序列表。

  2. 如果用户现在选择一个应用程序,请通过意图启动它并创建系统覆盖层以获取所有的触摸/按键事件(并让用户停止宏)。您可以在这里找到一种方法来完成此操作。存储触摸事件的x/y值。
  3. 您可以使用MotionEvent#obtain重新创建这些事件。
  4. 现在,需要使用已经获取了权限INJECT_EVENTS的rooted手机。启动应用程序并注入事件以执行宏。示例代码:

    Instrumentation m_Instrumentation = new Instrumentation();
    m_Instrumentation.sendPointerSync(motionEvent);
    

    关于程序化注入(以及按键事件),您可以在这里找到更多信息。

  5. 如果您需要帮助编译应用程序,这两个链接将对您有帮助:如何使用系统权限编译Android应用程序Android INJECT_EVENTS权限


4

不可能在一个View中启动应用程序,但您可以从您的应用程序中启动应用程序:

 Intent i = getPackageManager().getLaunchIntentForPackage("com.package.ofapp");
 startActivity(i);

//EDIT 对于你更新的问题:
在上述代码中启动活动后,你可以通过创建一个小视图覆盖在屏幕顶部来随时启动/停止宏。
此覆盖将位于所有活动之上。请查看以下链接:创建系统覆盖窗口(始终置顶) 您可以编写代码,在按下该视图时启动宏,然后如果用户再次按下按钮,则停止宏。这将在 onTouchEvent() 方法中实现。

-1

1
请不要写只有链接的答案。 - JJJ

-7

如果您使用意图(Intents),那么这是可能的。它们允许您在屏幕之间移动,并在同一应用程序内启动另一个不同的功能。请访问Coursera以获取有关意图的更多教程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接