将外来活动加载到自己的视图中?

时间:2011-07-09 22:06:29

标签: android

我正在尝试将另一个应用程序的主要活动加载到我自己的视图层次结构中,类似于“Fragments”可以执行的操作。

我试过了:

Context foreignContext = createPackageContext("com.android.calculator2", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
Class<?> foreignClass = foreignContext.getClassLoader().loadClass("com.android.calculator2.Calculator");
Intent intent = new Intent(this, foreignClass);

View view = getLocalActivityManager()
          .startActivity("ReferenceName", intent
          .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
          .getDecorView();
          this.setContentView(view);

尝试查找ClassNotFoundException时,com.my.app/com.android.calculator2.Calculator失败了(我假设Local中的getLocalActivityManager添加了前缀?)

有没有办法实现这个目标?我不需要与外部活动或其代码进行交互,只需在我自己的活动中显示它,因此只需用意图启动它就行不通。我认为由于安全考虑,这是不可能的,但如果我(理论上)可以访问外国应用程序的代码,应该可以以某种方式运行其onCreate方法?

谢谢!

2 个答案:

答案 0 :(得分:2)

我所知道的唯一一个是使用清单设置:sharedUserId

但这只有在您知道外键

时才有效
  

机器人:sharedUserId

     

将与其他应用程序共享的Linux用户标识的名称。默认情况下,Android会为每个应用程序分配自己唯一的用户ID。但是,如果将此属性设置为两个或多个应用程序的相同值,则它们将共享相同的ID - 前提是它们也由相同的证书签名。具有相同用户ID的应用程序可以访问彼此的数据,并且如果需要,可以在同一进程中运行。

答案 1 :(得分:0)

  

有没有办法实现这个目标?

绝对不是。对于初学者来说,这将是严重的安全违规行为。

  

如果我(理论上)可以访问外国应用程序的代码,应该可以以某种方式运行其onCreate方法吗?

您无法访问外国应用程序的代码。并且,他们的活动不在您的清单中。