繁体   English   中英

强制通过startActivity启动外部应用程序返回我的应用程序

[英]Force external app launched via startActivity to go back to my app

我正在开发的应用程序将启动用户设备上可用的默认SMS应用程序。 为此,我调用startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:123456")) 。SMS应用程序正确打开,但当用户按下后退按钮时,我看到不一致的行为:

  • 在运行Android 7的模拟器上,控件将按预期返回到我的应用程序。
  • 在运行Android 6的模拟器上,后退按钮执行“向上”操作,我现在在SMS消息列表中。 如果我再次推回,我会进入主屏幕,我不得不重新启动我的应用程序。

对于我作为用户,Android 6中的行为是意外的。 如果应用程序A启动应用程序B,则无论应用程序B是否实施“向上”操作,都应该返回应用程序A.

所以我想知道是否有一种方法可以在意图数据/标志中指定在启动的活动中推送的后退按钮将使用户返回“启动”活动。

我尝试使用startActivityForResult无济于事。

此行为通常可通过Intent标志控制,例如:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

应该按预期行事。

在这种情况下,这似乎不是系统/意图行为,它可能特定于您正在使用的消息传递应用程序。

在OnePlus one / Android M上进行测试时,如果我使用Messaging应用程序作为默认短信应用程序,或者使用Google Play中的Google Messages应用程序,我会遇到两种不同的情况。

看一下后退按钮返回外部SMS应用程序主要活动的第一个场景,我在LogCat看到以下几行:

ActivityManager: START u0 {act=android.intent.action.SENDTO dat=sms:xxx-xxx-xxxx flg=0x10808000 cmp=com.android.messaging/.ui.conversation.LaunchConversationActivity
ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x1000c000 cmp=com.android.messaging/.ui.conversationlist.ConversationListActivity}
ActivityManager: START u0 {flg=0x14000000 cmp=com.android.messaging/.ui.conversation.ConversationActivity
ActivityManager: Displayed com.android.messaging/.ui.conversation.ConversationActivity

这意味着为SENDTO操作列出的活动是LaunchConversationActivity ,它将startActivity自己调用到ConversationListActivity ,然后在相同的任务ConversationActivity打开,因此后退按钮返回到SMS主活动,而不是您的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM