【问题标题】:Invoking a class from one project in another project?从另一个项目中的一个项目调用一个类?
【发布时间】:2011-05-02 20:50:31
【问题描述】:

我对 eclipse 和 android 开发非常陌生,需要以下方面的帮助。我在 Eclipse 中使用 android SDK 构建了两个 android 项目:

  1. “ORF401 项目” - 针对 Android 2.2 平台
  2. “地图项目” - 针对 Google API 2.2 平台

我已按照标准 Hello World Google Maps for android tutorial 指定的步骤进行操作,并在运行第二个项目时将 Google 地图显示在模拟器上。

我在第一个项目中设置了一个菜单,其中一个选项是加载地图。但是,我不确定如何在该项目中加载地图,因为每个项目只能指定一个构建目标,因此我无法将 Google Maps API 指定为(附加)构建目标。有没有办法从第一个项目中的第二个项目调用主 .java 类?我看到可以在项目属性下对第二个项目进行引用,但我不确定如何使用它。我在网上找到的一个可能的解决方案是在第一个项目的 switch case 下添加以下代码:

Intent intent = new Intent(this, {googleMap}.class);  
startActivity(intent);

我认为这需要在第一个项目中添加一个额外的 googleMap.java 类以及另一个活动,但我无法让它工作。任何人都可以就我如何做到这一点提出建议吗?

如果其中一个或两个项目的代码有帮助,我很乐意发布。谢谢

【问题讨论】:

    标签: android eclipse google-maps


    【解决方案1】:

    项目的主要思想是每个应用程序都有一个项目来做某事。 我假设您的应用程序需要对地图做一些事情,以及其他事情。没有必要分裂这些想法。将它们放在一个项目中,因为它们构成了您开发的一个应用程序。

    我建议的第一件事 - 仔细阅读有关活动和意图的信息。前往http://developer.android.com - 一切都清楚地解释了。 清除所有这些后,您将看到制作一些按钮的意义,点击该按钮会打开一个带有您开发的地图功能的新屏幕。然后让我们返回或执行其他操作,例如打开新屏幕、浏览器等。

    放弃尝试从另一个项目调用另一个项目 :) 我认为这不是你想做的事情。

    只是为了确保我没有被误解 - 当然,您可能希望有两个项目。但这些很可能会导致两个单独的应用程序。幸运的是,应用程序也可以通过意图、内容提供者或更多进行交互。如果您想发送邮件,只需查看联系人应用程序如何将您带到 GMail 应用程序。如果这就是您想要实现的目标 - 仍然需要阅读有关意图。

    编辑:
    这是我在 cmets 中提到的链接:
    http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html
    它解释了如何实现您想要的“额外目标”。

    【讨论】:

    • 拆分项目是有原因的
    • 我刚刚添加了最后一段。也许这对你来说是正确的方式@Brandon?
    • @binnyb 你是对的,但必须记住两件事:引用的项目将失去在活动中使用其资源的能力;目标平台仍需设置。有一种方法可以有条件地使用库,更多信息请参见 android 开发人员团队博客。
    • 由于某种原因,当我创建一个新活动并尝试使用意图对象运行它时(如:androidcompetencycenter.com/2009/03/… 所述),我收到一条错误消息,指出进程遇到意外错误并被强制执行关闭。不知道为什么。我已经编写了在 switch case 结构中更改为新活动的意图(而不是单击按钮),但我无法想象这是导致错误的原因。如果我不能在晚上结束之前得到它,我可能会发布一条包含代码的新消息。感谢大佬们的帮助
    • 我有点忙着睡觉,所以帮不了你。希望您设法阅读了有关 android manifest xml 文件的信息,您必须在其中包含您希望能够运行的活动的名称。
    【解决方案2】:

    有一些方法可以在另一个项目中调用一个项目中的类,但这里存在更大的问题。第一个项目可以在任何 Android 设备上运行。但是,第二个需要 Google Maps API。无论如何,您将无法调用它,因为除非您处于支持 Google API 的环境中,否则无法安装它。这样做确实没有任何好处,除非您在项目 1 中有额外的功能,这样它就可以在没有项目 2 的情况下存在。

    我建议使用 Intent 方法,而不是尝试将某些东西组合在一起以允许您访问另一个类。无论如何,尽管像这样将这两者耦合在一起似乎过于复杂且容易出错。我建议在项目 1 中简单地嵌入映射功能并需要 Google API。无论如何,大多数主流设备都支持它们。

    如果您同意拥有两个具有不同构建目标的独立项目的想法,我建议您考虑使用 BroadcastReceivers 与您从应用程序 1 广播的自定义意图。我不相信 startActivity 会由于类加载器问题,跨应用程序边界工作,但我可能错了。

    【讨论】:

    • 感谢您的回复。您介意通过在项目 1 中嵌入映射功能并需要 Google API 来准确描述您的意思吗?我尝试将使用库和互联网权限添加到项目 1 的清单 xml 中,并将 Google API 设置为构建目标(而不是 Android 2.2),但这给了我无法解决的错误。我是将扩展 MapActivity 添加到主 .java 类(对应于我为项目 1 创建的活动),还是创建一个全新的类并从项目 2 复制内容?
    • 如何将项目 2 导出为 .jar 并将 .jar 添加到构建路径下的库中?这是否能让我从项目 2 中调用该类而无需进行大量更改?我现在正在处理它,所以如果我知道了,我会再次发布并让你知道
    • 一个项目可以是一个库项目,然后可以包含在另一个项目中。然后,您可以启动库内的活动。不过,它们都必须在清单中声明。
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 2013-12-30
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多