4

行,

所以我正在制作一个 UI 元素的库项目。该库有一些基于ActionBarSherlock的活动,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());

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

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

4

3 回答 3

11

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

Class.forName("com.mypackage.myMainActivity")

在库项目中添加此代码以调用,

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

“com.mypackage.myMainActivity”是 Main 项目中的 Activity,我们需要从它的 Library 项目中调用它。

于 2014-12-11T06:41:38.243 回答
2

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

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

于 2012-09-21T11:38:08.103 回答
0

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

于 2012-09-21T11:42:23.360 回答