应用内的应用

时间:2014-05-26 11:26:59

标签: android multitasking

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

所以在横向模式下,它看起来应该是这样的:

enter image description here

这背后的想法是:

我希望能够在我自己的活动旁边开始并运行第三方活动,并且我希望能够通过控制第三方活动的活动创建单独的makros。

基本上是这样的:

  • 从我的应用内部开始第三方活动
  • 开始makro录制
  • 在第三方活动中做点什么
  • 停止makro录制
  • 随时使用makro

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

4 个答案:

答案 0 :(得分:19)

<强>无根:
可悲的是,如果没有手机,你想要实现的目标似乎是不可能的,因为你只能通过意图与其他应用互动。由于开发人员决定他们的应用程序如何对特定意图做出反应,因此以这种方式创建宏几乎是不可能的。

使用有根电话:

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

    getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);
    

    检索所有已安装应用的列表。

  2. 如果用户现在选择了某个应用,请通过意图启动它并创建系统覆盖以获取所有触摸/按键事件(并让用户停止该宏)。你可以找到一种方法here。存储触摸事件的x / y值。
  3. 您可以使用MotionEvent#obtain
  4. 重新创建活动
  5. 现在出现了需要有根电话的部分(权限INJECT_EVENTS)。启动应用程序并注入事件,以便宏执行。 Samplecode:

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

    您可以找到有关注入(也是关键事件)here的更多信息。

  6. 如果您需要帮助来编译您的应用,这两个链接将为您提供帮助:How to compile Android Application with system permissionsAndroid INJECT_EVENTS permission

答案 1 :(得分:3)

无法在View中启动应用程序,但您可以在应用程序中启动应用程序:

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

//编辑更新的问题:

从上面的代码开始活动后,您可以在新应用中随时启动/停止宏的一种方法是在屏幕顶部创建一个小视图覆盖。

此叠加层将位于所有活动之上。

请查看以下链接:Creating a system overlay window (always on top)

您可以编写代码以在按下View时启动宏,然后如果按下按钮一次并且用户再次按下该按钮,则停止宏。这将采用onTouchEvent()方法。

答案 2 :(得分:0)

是的,我认为有可能是因为名为浮动应用程序的应用程序做到了这一点(没有根源)

仅使用一些adb命令

https://play.google.com/store/apps/details?id=com.lwi.android.flapps

答案 3 :(得分:-2)

是的,如果你使用Intents可以。它们允许您在屏幕之间移动并在同一个应用程序中启动另一个不同的功能。访问coursera获取更多关于意图的教程