【问题标题】:Call MainActivity from module从模块调用 MainActivity
【发布时间】:2019-06-07 10:13:09
【问题描述】:

我有一些 Android 模块,它们都依赖于同一个库模块,用于业务逻辑。

com.example.api
-> com.example.app1
-> com.example.app2
-> com.example.app3

现在,我尝试从库中获取当前的MainActivity (android.intent.action.MAIN)。在调用操作时没有指定想要的活动,我会为所有设备应用程序获取 IntentPicker,其中包含 MAIN 操作。

如何获取当前MainActivity 的类路径? 即com.example.app1.MainActivity

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    作为模块,主应用程序的一个单独部分和一个模块基本上包含应用程序的库类和资源。可以单独创建和测试模块。当您在项目中使用模块时,您的主应用程序可以使用模块的资源,但您的模块不能使用主应用程序的资源。

    为了满足您的需求,您可以使用包管理器从模块中调用主要活动。您可以在developer site 上查看详细信息。调用类似于

    Intent appMainIntent = getPackageManager().getLaunchIntentForPackage("com.app.myproject");
    startActivity(appMainIntent);
    

    只是通知你,如果找不到包,appMainIntent 可以为 null。因此,请检查代码中的空指针异常。

    【讨论】:

    • 所以我必须硬编码所有已知的包来测试,它是哪个应用程序?没有办法找到当前的主要活动?
    • 是的。您每次都必须使用包名称调用并且必须检查是否出现空值。为了方便通话,您可以点击链接stackoverflow.com/questions/41465053/…
    【解决方案2】:

    要获取应用程序的当前包名称,您可以调用getApplicationContext().getPackageName() 并获取此包的启动意图,如@hari-n-jha 所述,您可以调用getPackageManager().getLaunchIntentForPackage( String packageName )

    完整的解决方案是:

    String packageName = getApplicationContext().getPackageName();
    Intent i = getPackageManager().getLaunchIntentForPackage(packageName);
    startActivity(i);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多