从Android中的库项目调用应用程序活动

时间:2012-09-21 11:34:22

标签: android android-intent android-activity android-library library-project

确定,

所以我正在制作UI元素的库项目。该库有一些基于 ActionBarSherlock 的活动,它是android中操作栏的向后兼容库。在这些活动中,我希望在操作栏中有一个按钮,无论用户在图书馆项目中使用哪种活动,都会将用户带回家。

一些术语。 “库”指的是我正在研究的Android UI库项目。 “应用程序”是指开发人员可能在使用库时使用的任何客户。

通常情况下,当你进行一项活动而你想打电话给另一项活动时,你会做这样的事情。

intent = new Intent(this, WhateverMyActivityName.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

足够简单。但这是棘手的一点。 Android库几乎不知道什么应用程序正在使用它们。因此,'WhateverMyActivityName.class'是无用的,因为无法预测开发人员应用程序将调用其活动的内容。

我需要替换

intent = new Intent(this, WhateverMyActivityName.class);

有这样的东西

intent = new Intent(this, getApplication().MainActivity().getClass());

或者可能使用某种意图操作来调用应用程序(Intent.ACTION_MAIN or Intent.CATEGORY_LAUNCHER)

中的主要Activity

简而言之:如何从库项目中获取应用程序主要活动?

3 个答案:

答案 0 :(得分:11)

我们可以使用反射来获取类对象。

<强>的Class.forName(&#34; com.mypackage.myMainActivity&#34)

在Library项目中添加此代码以进行调用,

try {
      Intent myIntent = new Intent(this,Class.forName("com.mypackage.myMainActivity"));
      startActivity(myIntent );
} catch (ClassNotFoundException e) {
     e.printStackTrace();
}

&#34; com.mypackage.myMainActivity&#34;是Main项目中的Activity,我们需要从它的Library项目中调用它。

答案 1 :(得分:2)

应用程序调用库中的某个方法,提供要调用的Intent,或者提供要调用的活动的Class。您的图书馆会在某处存储并使用它。

您认为正确答案为“Intent.ACTION_MAIN或Intent.CATEGORY_LAUNCHER”可能不准确。例如,某些应用程序具有闪屏活动(这本身就是一个问题,但这不是重点),而且这不应该是应用程序中的家庭可供性应用的地方。

答案 2 :(得分:0)

您可以使用this帖子中提到的代码获取活动列表。之后循环遍历resolveinfo并检查intenet过滤器以找到具有所需意图操作的活动。