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