Android jetpack Navigation deepLink 通过URL跳转到指定页面的Framgent 没安装app则打开网址
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android jetpack Navigation deepLink 通过URL跳转到指定页面的Framgent 没安装app则打开网址相关的知识,希望对你有一定的参考价值。
需求 给定一个链接地址 要求跳转到Detailfragment页面当中并携带参数。
实际上。这个在原生是比较不好处理的。
but Navigation 官方解决方案比较简单
detailFragment当中配置下面这句话
<deepLink app:uri="www.baidu.com/params" />
承载detailFragment的页面配置上面
<activity android:name=".activity.NavigationActivity"
android:exported="true">
<nav-graph android:value="@navigation/my_nav_graph" />
</activity>
针对代码获取参数
package com.anguomob.jecpack.fragment
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.navigation.Navigation
import com.anguomob.jecpack.R
import com.anguomob.jecpack.databinding.FragmentDetailNavigationBinding
import com.anguomob.jecpack.databinding.FragmentHomeNavigationBinding
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
/**
* A simple [Fragment] subclass.
* Use the [DetailNavigationFragment.newInstance] factory method to
* create an instance of this fragment.
*/
class DetailNavigationFragment : Fragment()
private lateinit var binding: FragmentDetailNavigationBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View?
binding = FragmentDetailNavigationBinding.inflate(inflater)
// inflater.inflate(R.layout.fragment_home_navigation, container, false)
return binding.root
override fun onActivityCreated(savedInstanceState: Bundle?)
super.onActivityCreated(savedInstanceState)
arguments?.let
val args = HomeNavigationFragmentArgs.fromBundle(it);
val username = args.username
val age = args.age
val params = it.getString("params")
binding.tvUserName.text =
"username:" + username + "age:" + age + "params:" + params.toString()
binding.btDetail.setOnClickListener
val findNavController = Navigation.findNavController(it)
findNavController.navigate(R.id.action_detailNavigationFragment_to_homeNavigationFragment)
重点关注
val params = it.getString("params")
就可以拿到params
如何调试呢。笨方法 写一个意图。进行跳转
聪明方法。adb shell命令
adb shell am start -a android.intent.action.VIEW -d "http://www.baidu.com/fromWeb"
即可调用起来针对浏览这个网址的意图
到时候如果安装了我们apk可以选择是用我们程序打开或者浏览器。
如果没有安装我们app则可以直接使用浏览器方法固定的网站。一般这种场景使用的还是挺多的
以上是关于Android jetpack Navigation deepLink 通过URL跳转到指定页面的Framgent 没安装app则打开网址的主要内容,如果未能解决你的问题,请参考以下文章
Android Jetpack架构组件带你了解Android Jetpack
Android Jetpack架构组件——什么是Jetpack?
Android Jetpack架构组件——什么是Jetpack?