代码之家  ›  专栏  ›  技术社区  ›  John O'Reilly

Android即时应用程序和应用程序链接的使用

  •  4
  • John O'Reilly  · 技术社区  · 7 年前

    一般来说,为了支持即时应用,我们希望使用应用链接在不同功能模块中的活动之间导航,但在大多数情况下,我们还需要使用这些模块来构建可安装的apk,以在5.0以下的版本上运行
    这是否意味着代码需要检查API级别并根据版本使用不同的方法(例如调用 startActivity 如果<5.0)?

    这是我在网上找到的信息 Instant Apps documentation :

    应用程序的即时版本和可安装版本都必须实现 Android应用程序链接功能介绍于 安卓6.0 . 应用程序链接 提供将URL连接到离散URL的主要机制

    即时应用程序无法直接启动其他功能中的活动; 相反,它必须请求与另一个对应的URL地址 其他功能的入口点活动。

    然后从 https://developer.android.com/topic/instant-apps/index.html

    安卓5.0 (API级别21)通过Android O

    1 回复  |  直到 7 年前
        1
  •  4
  •   Volo    7 年前

    startActivity 无论如何。如果你想打开属于另一个即时应用程序功能模块的活动,你只需要使用隐式意图。

    用于在同一功能模块内导航(或者如果您的即时应用程序仅包含 one base feature )明确的意图可以自由使用。

    现在看起来Android即时应用程序在 Android 5.0或更高版本。然而,应用程序链接(我理解 即时应用程序依赖于)仅在6.0或更高版本中受支持

    这是否意味着代码需要检查API级别并使用 不同的方法取决于版本(例如调用 星形触觉

    是的,如果你想百分之百地确保你的用户不会看到歧义消除(也称为“选择器”)对话框 like this ,同时在应用程序的活动之间浏览(很可能你希望避免这种奇怪的用户体验)。如果您使用依赖注入,您可以在应用程序中使用一个用于导航的界面,然后为可安装应用程序和即时应用程序提供不同的实现。

    interface Navigation {
       void startActivityFromModuleA();
       void startActivityFromModuleB();
       …
    }
    
    class InstallableAppNavigation implements Navigation {
       public void startActivityFromModuleA() {
           // explicit intent
           Intent intent = new Intent(context, ActivityFromModuleA.class);
           context.startActivity(intent);
       }
       …
    }
    
    class InstantAppNavigation implements Navigation {
       public void startActivityFromModuleA() {
           // implicit intent
           Intent intent = new Intent(Intent.ACTION_VIEW,  
                   Uri.parse("https://your.app.com/moduleA/smth"));
           context.startActivity(intent);
       }
       …
    }