确定,
所以我正在制作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)
简而言之:如何从库项目中获取应用程序主要活动?
答案 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过滤器以找到具有所需意图操作的活动。