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

     2023-04-15     170

关键词:

【中文标题】从 Android 中的库项目中调用应用程序活动【英文标题】:Calling an Application Activity from a Library Project in Android 【发布时间】:2012-09-13 19:52:55 【问题描述】:

好的,

所以我正在制作一个 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)

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

【问题讨论】:

刚刚在 Intent 文档 ACTION_MAIN 中找到了这个,类别为 CATEGORY_HOME -- 启动主屏幕。 这是一件很奇怪的事情。通常我们创建库项目,以便我们可以将它们重用于许多应用程序。应用程序独立代码去那里..从库项目调用特定的应用程序活动限制它的用法.. @Krishnabhadra 这是一个不寻常的用例,但图书馆设计有一个主页按钮,我想不出任何办法来阻止图书馆向应用程序流血。也许我应该将它配置为 XML 资源,以便开发人员可以指定他们想要调用的活动? 【参考方案1】:

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

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 项目中调用它。

【讨论】:

我花了好几天才弄明白。非常感谢,这是唯一对我有用的解决方案。【参考方案2】:

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

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

【讨论】:

也许(考虑到它是一个库并且可能需要一些配置)我可以让开发人员将他们的类定义为 xml 资源。然后调用一个意图? @OVERTONE:我想这可行。就个人而言,我真的建议您让开发人员提供Intent 以供您使用,因为他们可能希望对标志等进行一些控制。 让他们提供意图。这听起来更干净。如果他们愿意,我也可以让他们禁用它。下一个任务是找到一种干净的方法来做到这一点。有什么建议吗? @OVERTONE:正如我所写,“应用程序调用库中的某些方法,提供要调用的Intent”。由于我们对您的图书馆一无所知,因此很难提供更具体的建议。【参考方案3】:

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

【讨论】:

也许我理解错了,但这种方法不需要应用程序的包名吗?在这种情况下,我仍然需要找到开发者应用程序的包名。 @OVERTONE: 因为你有一个来自开发者应用程序的Context(你在上面调用startActivity()),你可以在那个Context上调用getPackageName()来找到包名的应用程序。 你在那里有上下文,从那里你可以得到包管理器并做剩下的事情。

Grails 项目在运行时不会从其自己的 lib 目录中的库中解析依赖关系

...问题描述】:女士们,先生们,我有一个非常简单的grails应用程序,我需要通过直接类依赖API调用来调用我们公司的平台API。 查看详情

MFC 和 /clr C++ 项目中的库

...应商提供了一个示例(VS)解决方案,一个演示调用的C++MFC应用程序——该应用程序在我们的机器上运行良好。它调用一个初始化函数,请求一个串行端口HANDLE,然后进行一些通信。所有的笨拙的多莉。当我从我们自己的Hardwar 查看详情

如何在 android studio 中使用我的 android 项目作为其他项目中的库? [复制]

...1719:09:27【问题描述】:我在androidstudio中开发了一个android应用程序。我想在其他项目中将其用作我的库。有没有办法将此项目用作 查看详情

如何从android中的活动调用片段方法?

】如何从android中的活动调用片段方法?【英文标题】:Howtocallafragmentmethodfromanactivityinandroid?【发布时间】:2016-10-1105:45:36【问题描述】:我的主活动上有一个选项卡式视图和一个浮动操作按钮。每当我单击浮动操作按钮时,我... 查看详情

ANDROID:从解析中检索图像到 android 活动

】ANDROID:从解析中检索图像到android活动【英文标题】:ANDROID:Retrievingimagefromparsetoanandroidactivity【发布时间】:2017-02-2207:08:23【问题描述】:我创建了一个ListView。当我单击ListView的单个项目时,我正在调用一个活动来显示单个项... 查看详情

如何从android中的每个listview项目调用不同的意图?

...布时间】:2011-12-1709:32:49【问题描述】:我正在开发安卓应用程序。在我的项目中,我需要创建Listview。我的布局,即info.xml包含带有一个图像视图的顶栏,带有其他图像视图的页脚。同样在布局的中心,我保留了一个image 查看详情

如何从活动中调用片段方法?

...学者级别的Android开发人员,我正在制作一个计数器Android应用程序,它可以使用我们设备上的音量键递增和递减。无论用户按下音量增大或减小按钮(长按)多长时间,应用都会增加或减少一次。我已经在一个活动中实现了这个... 查看详情

从Android中的子活动中取回对象[重复]

】从Android中的子活动中取回对象[重复]【英文标题】:GettingbackobjectfromchildactiviyinAndroid[duplicate]【发布时间】:2015-09-1418:56:06【问题描述】:我有一个ma​​in_activity,它通过Intent启动一个子Activity。我知道我们在onActivityResult中调... 查看详情

从活动中调用片段方法

...ActionBar。在这个菜单中,每个选项都应该调用FragmentView1中的方法来更新它。但我真 查看详情

Android:使用 ListView 和 Service 从应用小部件开始活动

...要的一些项目。如果单击ListView中的项目,我想转到我的应用程序的活动。我现在可以显示带有单击位置的Toast 查看详情

android项目中的库pdfview

】android项目中的库pdfview【英文标题】:librarypdfviewinandroidproject【发布时间】:2016-04-2518:55:41【问题描述】:我在android中使用pdfview库。我在thislink中遇到问题。接受的答案说我们应该将thisfolder添加到我的项目中,但是没有说明... 查看详情

偏好活动中的 Android 更新语言

...发布时间】:2011-12-0909:31:45【问题描述】:在我的android应用程序中,我有一个偏好活动,让用户覆盖应用程序的语言。为此,我在每个活动的onResume()中调用此函数,然后重置内容视图:publicstaticvoidcheckOverrideSystemLanguage(Cont 查看详情

Android,如何从我的数据库更新列表视图中的选定项目?

...题描述】:这是我目前的代码,但是当我按下更新按钮时应用程序崩溃了。我想更新列表中的选定项目,我已经创建了更新活动,允许我将值加载到我的数据库中,但我不知道如何加载列表中选定项目的值。Arr 查看详情

如何从回收站视图 android 中传递一个 url onclick 项目并 onclick 获取位置 dipaly 在另一个活动中的 url

】如何从回收站视图android中传递一个urlonclick项目并onclick获取位置dipaly在另一个活动中的url【英文标题】:Howtopassaurlonclickonitemfromarecyclerviewandroidandonclickgettingpositiondipalytheurlofthatinanotheractivity【发布时间】:2020-01-1618:47:12【问题... 查看详情

java示例代码_从android中的非活动类调用服务方法

java示例代码_从android中的非活动类调用服务方法 查看详情

从应用程序的主要活动中调用小部件的 onUpdate 方法

】从应用程序的主要活动中调用小部件的onUpdate方法【英文标题】:Callwidget\'sonUpdatemethodfromtheapp\'smainactivity【发布时间】:2011-06-2322:28:08【问题描述】:我正在开发一个包含小部件的Android应用程序。应用程序的主界面是一个简... 查看详情

如何从 Android 活动导航到特定的颤振路线?

...】:2019-01-1207:59:36【问题描述】:我有一个现有的android应用程序,我已经在我的项目中集成了颤振我想调用一个颤振特定的路线,我在我的主要方法中定义这样的路线classFlutterViewextendsStatelessWidg 查看详情

java示例代码_从Android中的noraml java类调用活动类

java示例代码_从Android中的noraml java类调用活动类 查看详情