【发布时间】:2020-08-11 18:07:52
【问题描述】:
我正在开发一个使用意图(ACTION_SEND)接收数据的应用。我从 Chrome 共享内容时发现了一个奇怪的问题(仅在 Chrome 83 或更高版本中发生,旧版本无法重现该问题)例如,如果内容仅是选定的文本,例如,数据到达我的应用程序正确,但如果共享的内容是 URL,它会到达我的应用程序,但突然我的应用程序替换了应用程序切换器中的 Chrome。因此,如果我打开了我的应用和 Chrome,则在数据共享后我有两个我的应用实例(即使 Chrome 图标出现在该窗口的顶部,如果我点击它,就会打开我的应用)。
对这里发生的事情有任何想法吗?值得注意的是,我无法使用 Firefox 重现此内容。
我的活动代码:
class MainActivity : HybridActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("MyApp", "onCreate")
super.onCreate(savedInstanceState)
val testButton = Button(this)
setContentView(testButton)
}
override fun onStart(){
super.onStart()
var bundle = intent.getExtras();
Log.d("MyApp", "onStart intent tostr: " + intent.toString())
if (bundle != null) {
bundle.keySet().forEach {
Log.d("MyApp", "EXTRA:" + it + "=" + bundle.get(it));
}
}
}
override fun onResume() {
super.onResume()
Log.d("MyApp", "onResume")
}
}
意图过滤器在清单中定义如下:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
PS:不知道这是否相关,但我已将清单中的启动模式更改为 singleInstance 并且问题仍然可以重现...
PS2:我添加了这个活动转储,在问题出现时生成: https://gist.github.com/Leprosy/f63bf02bb1c2887f0e419799d98635ab
【问题讨论】:
-
您可以使用
adb shell dumpsys activity activities获取有关正在发生的事情的更多信息。这将显示所有正在运行的任务以及这些任务中的所有活动。如果你有一个singleInstanceActivity并且 Chrome 正在将Activity启动到它自己的任务中,那么这是非常错误的。您能否重现问题并将adb命令的输出复制到问题中(或将其放在云中某处并发布指向它的链接)? -
我已编辑问题并将链接添加到包含日志的要点。感谢您的帮助!
标签: android kotlin android-intent