【问题标题】:From Android app A, how to open non main activity in app B?从 Android 应用程序 A,如何在应用程序 B 中打开非主要活动?
【发布时间】:2019-12-23 10:03:56
【问题描述】:

我有应用 A 和应用 B,两个 APK 都是使用相同的代码库生成的。 App B 的生成方式与 App A 不同,因此它们具有不同的 applicationId。

从应用 A,我想在应用 B 中启动 Activity1。 这是我正在使用的代码:

Intent intent=new Intent();
intent.setComponent(new ComponentName("com.packagename.appb", "com.packagename.appb.Activity1"));
startActivity(intent);

我遇到了异常

ActivityNotFoundException:找不到明确的活动类 {com.packagename.appb/com.packagename.appb.Activity1};你 在你的 AndroidManifest.xml 中声明了这个活动?

但 Activity1 已在清单中声明,因为它是应用 A 中也可用的 Activity

我该怎么办?

【问题讨论】:

  • Intent intent = getPackageManager().getLaunchIntentForPackage("com.packagename.appb");= 这会有帮助吗?
  • 使用这个方法,它启动了应用 B 的主要活动,而我想开始另一个活动

标签: android android-intent android-activity


【解决方案1】:

如果适合,您可以使用以下方法。 创建启动器意图:

Intent intent = getPackageManager().getLaunchIntentForPackage("com.packagename.appb");

Intent 中放入一些数据,检查 MainActivity onStart 方法,如果有数据移动到所需的 Activity,最后从 Intent 中删除数据。例如:

intent.putExtra("activityB", true);
startActivity(intent);

B 应用内MainActivity:

@Override
protected void onStart() {
    super.onStart();
   Intent intent = getIntent();
   boolean shouldStartB = intent.getBooleanExtra("activityB", false);
    if(shouldStartB) {
      //start new Activity 
      intent.removeExtra("activityB"); //Don't forget to remove extra to prevent bug
   }
}

【讨论】:

    【解决方案2】:

    您应该直接使用其他应用程序的 packageName/ 类。例如:

    Intent intent = new Intent("com.example.app");
    

    您可能希望在未安装应用程序时尝试/捕获 ActivityNotFoundException

    【讨论】:

    • 如果我使用 Intent intent = new Intent("com.packagename.appb.Activity1");我得到一个 ActivityNotFoundException: No Activity found to handle Intent
    • 您是否使用 setClassName 方法进行了测试?
    • 是的,同样的异常:ActivityNotFoundException
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多