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

时间:2016-09-28 09:55:12

标签: android android-intent

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

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

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

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

我尝试使用startActivityForResult无效。

1 个答案:

答案 0 :(得分:0)

此行为通常可通过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应用,我会遇到两种不同的情况。< / p>

稍微了解后退按钮返回外部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主要活动,而不是你的。