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简介

Android Jetpack架构组件——什么是Jetpack?

Android Jetpack架构组件——什么是Jetpack?

《Android Jetpack从入门到精通+高级Jetpack强化实战》,最新Jetpack系列开发笔记开源

Android高级Jetpack架构组件+Jetpack compose强化实战