通过intent-filter kotlin从其他应用程序接收数据?

Posted

技术标签:

【中文标题】通过intent-filter kotlin从其他应用程序接收数据?【英文标题】:Receive data from other app through intent-filter kotlin? 【发布时间】:2021-06-30 11:08:03 【问题描述】:

主活动

 val isActivityLaunchedFromActionSend = intent?.action == Intent.ACTION_SEND
    val isActivityLaunchedFromActionSendMultiple = intent?.action == Intent.ACTION_SEND_MULTIPLE
    val isTextData = intent.type?.startsWith("text/") == true
    val isImageData = intent.type?.startsWith("image/") == true
    if (isActivityLaunchedFromActionSend && isTextData) 

        // Session 1: Handle received text data
        val sentString = intent.getStringExtra(Intent.EXTRA_TEXT)

       //Sending data to fragment so we can set the value in edittext.
        val bundle = Bundle()
        bundle.putString("message", sentString)

        val fragInfo = HomeFragment()
        fragInfo.setArguments(bundle)
      
     else if (isActivityLaunchedFromActionSend && isImageData) 

        // Session 2: Handle received image data
        val sentImageURI = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri

     else if (isActivityLaunchedFromActionSendMultiple && isImageData) 
        val imageURIList = intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) ?: arrayListOf()           
    

首页片段

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)

    val myValue =requireArguments().getString("message")
    etUrl.setText(myValue)
   

这里 myValue 中的值将变为 null。而在 HomeFragment 中有一个 editText 所以当用户向我的应用发送链接时,该链接将自动在 EditText 中过去。

清单

  <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />

那么你能告诉我我缺少什么吗?

【问题讨论】:

【参考方案1】:

您从不使用HomeFragment。在if 块中,您有val fragInfo = HomeFragment(),将参数放在该片段上......然后永远不要对fragInfo 做任何事情。因此,HomeFragment 实例及其参数将被垃圾回收。

【讨论】:

我无法理解您到底想说什么,所以如果可能的话您可以更改代码吗? @BhavyaVarmora:“如果可能的话,您可以更改代码吗?” - 不,因为代码不在您的问题中。在某处,您创建了 两个 HomeFragment 实例。一个——在你的第一个代码 sn-p 中显示的那个——是没用的,因为你什么都不做。第二个是实际设置你的 UI 的那个,它没有你的文本的参数。找到第二个 HomeFragment 的创建位置,然后决定如何将该代码与第一个代码 sn-p 中的内容合并。

以上是关于通过intent-filter kotlin从其他应用程序接收数据?的主要内容,如果未能解决你的问题,请参考以下文章

通过适配器在片段之间传递数据(Kotlin Android)

Android Intent-filter 动作名称与数据方案

Kotlin Vocabulary | Kotlin 内建代理

Kotlin Vocabulary | Kotlin 内建代理

Kotlin,WorkManager 每周重复调度一次

如何在 Kotlin 中接收和解析 HTTP Json 文件