Android单Activity架构下如何将浏览器分享URL传递给NavGraph内的Fragment
导航架构下浏览器分享URL到指定Fragment实现方案
1. 修正MainActivity逻辑
原有代码直接在onCreate中获取导航控制器会因NavHostFragment未完成初始化容易导致导航失败,同时需要兼容应用已在后台运行的分享场景,修改后代码如下:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 处理冷启动时的分享Intent handleShareIntent(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) // 处理应用已运行时收到的新分享Intent handleShareIntent(intent) } private fun handleShareIntent(intent: Intent?) { if (intent?.action == Intent.ACTION_SEND && "text/plain" == intent.type) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { url -> // 正确获取NavController:先获取NavHostFragment实例 val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostFragment) as NavHostFragment val navController = navHostFragment.navController val bundle = Bundle().apply { putString("urlFromWeb", url) } // 避免重复导航:当前页面已经是saveFragment时不重复跳转 if (navController.currentDestination?.id != R.id.saveFragment) { navController.navigate(R.id.saveFragment, bundle) } } } } }
2. 导航图参数配置(推荐)
在main_navigation_file.xml中为saveFragment节点下配置接收参数,避免传参类型错误:
<fragment android:id="@+id/saveFragment" android:name="你的应用包名.saveF" android:label="saveF" > <argument android:name="urlFromWeb" app:argType="string" android:defaultValue="@null" /> </fragment>
3. saveFragment接收参数处理
在saveF的onViewCreated方法中获取传递的URL并执行存储逻辑:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val shareUrl = arguments?.getString("urlFromWeb") shareUrl?.let { // 执行你的URL存储逻辑 saveUrlToLocal(it) } }
4. 确认Manifest配置
确保AndroidManifest.xml中MainActivity节点已经配置分享接收的intent-filter,否则浏览器无法找到你的应用:
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
内容的提问来源于stack exchange,提问作者Satendra Pal
相关产品推荐
相关产品推荐

