Android 导航组件打开 url

Android navigation component open url

我有在浏览器中打开 URL 的简单代码:

startActivity(Intent(
    Intent.ACTION_VIEW, Uri.parse(resources.getString(R.string.application_url))
))

如何将其转换为导航组件项?

我是否需要为此构建 custom navigator,或者导航组件针对这种情况内置了一些东西?

我明白了,对于这个简单的案例,不需要自定义导航器,您只需要创建导航端点:

<activity
    android:id="@+id/navigation_endpoint_id"
    app:action="android.intent.action.VIEW"
    app:data="@string/application_url"/>

如果您使用的是导航抽屉,则可以像这样以编程方式进行设置。这样您就可以为特定的导航项设置自定义功能,而不会失去导航图的优势

navigationView.setNavigationItemSelectedListener {item->
                drawerLayout.closeDrawer(GravityCompat.START)
                when(item.itemId){
                    R.id.navigation_rate -> {
                        startActivity(Intent(
                                Intent.ACTION_VIEW, Uri.parse(resources.getString(R.string.app_playstore_url))
                        ))
                        return@setNavigationItemSelectedListener true
                    }
                    else  -> NavigationUI.onNavDestinationSelected(item, navController)
                }
            }

对于Dynamic Uri,我们可以这样传递数据:

<activity
    android:id="@+id/whatsappRedirectionActivity"
    app:action="android.intent.action.VIEW"
    app:dataPattern="https://wa.me/{number}">
    <argument
         android:name="number"
         app:argType="string" />
</activity>

这需要包含到您要重定向的导航图中。使用它我们也可以使用 safeargs 操作。