【问题标题】:onNewIntent in jetpack composeJetpack compose 中的 onNewIntent
【发布时间】:2022-09-24 23:50:09
【问题描述】:

我正在从其他应用程序接收一些文本,例如,如果人们从 youtube 应用程序共享视频,我的应用程序将显示在可共享列表中。如果他们选择我的应用程序,我想获取文本内容。

我有一个这样的意图过滤器。

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

我可以使用活动中的onNewIntent 方法访问数据。

override fun onNewIntent(intent: Intent?) {
    Log.d(TAG, intent?.getStringExtra(Intent.EXTRA_TEXT).toString())
    super.onNewIntent(intent)
}

但是我想访问可组合函数中的文本,我该怎么做?

  • 您可以从onNewIntent() 更新活动范围的视图模型,并让它通过MutableStateStateFlowLiveData 或其他方式提供数据。然后,您需要将该视图模型传递到您的根可组合项(您使用 setContent() 设置的那个),以便子可组合项可以观察结果。
  • 我的建议是向您的 Activity 类添加一个(最好是委托的)MutableState 属性并将其传递给可组合对象。如果您使用 ViewModel,则必须处理不同的生命周期,因为 ViewModel 往往比 Activity 寿命更长。您通常希望从 onCreate() 和 onNewIntent() 中设置属性。

标签: android android-jetpack-compose


【解决方案1】:

我认为在setContent 方法中使用一次性效果应该可以完成工作

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            DisposableEffect(Unit) {
                val listener = Consumer<Intent> {
                    // logic here
                }
                addOnNewIntentListener(listener)
                onDispose { removeOnNewIntentListener(listener) }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2023-01-22
    • 2021-12-26
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多