【问题标题】:How to start main activity from a library?如何从图书馆开始主要活动?
【发布时间】:2012-08-20 14:32:12
【问题描述】:

我正在使用一个项目 A 和一个库项目来开发我的 Android 应用程序。这两个项目都有活动。如果我目前在项目 A 中,那么只需导入即可轻松启动库项目中的活动。但是,如果我来自图书馆项目中的活动,我不确定如何在项目 A 中启动活动。我正在尝试使库项目独立于项目 A 的包名称,因为我将它用于多个应用程序。关于如何做到这一点的任何想法?谢谢。

【问题讨论】:

    标签: android android-library


    【解决方案1】:

    有几种可能的解决方案。

    最好在清单条目中为您希望其他项目访问的活动注册intent filter。有一个关于意图过滤器的很棒的教程here

    另一个选项是将一个类传递给库项目,并使用Intent (Context packageContext, Class cls) 构造函数创建一个意图来触发和启动活动。不过,使用意图过滤器会是一种更好的实践和学习体验。

    祝你好运!

    【讨论】:

    • 如果我在同一部手机上安装了多个应用程序,这仍然有效吗?假设我在同一部手机上也安装了 Project B,这种方法对他们都适用吗?
    • 您可以使用createChooser 打开选择屏幕来选择您要处理意图的活动。可以查看是否有activity处理intent:Intent.resolveActivity
    【解决方案2】:

    我相信这是最简单的答案:您需要一个存在于库中的对象,您可以在您的项目中对其进行扩展。

    想象一下,您的库有一个您的 ProjectApplication 扩展的 LibraryApplication。 LibraryActivity 可以调用:

    ((LibraryApplication)getApplication()).startNewActivity(this, "goHome")
    

    您的 ProjectApplication 实现了这个新方法:

    public void startNewActivity(Context context, String action) {
        if("goHome".equals(action)) {
            startActivity(context, ProjectHomeActivity.class);
        }
    }
    

    【讨论】:

    • 看来,如果我这样做,扩展类永远不会被调用。它只调用我在图书馆项目中的任何东西。我需要使方法抽象还是什么?
    • 这是否可以从库项目中调用主项目内的函数。
    【解决方案3】:

    您可以将项目添加为外部库。你也可以使用 maven 来做这种事情。

    【讨论】:

      【解决方案4】:

      来自简单好用的answer

      try {
         startActivity(new Intent(this, Class.forName("com.package.HomeActivity")));
       } catch (ClassNotFoundException e) {
          e.printStackTrace();
       }
      

      也可以通过 answer 使用操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        相关资源
        最近更新 更多