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

Android 强制通过startActivity启动的外部应用程序返回到我的应用程序,android,android-intent,Android,Android Intent,我正在开发的应用程序将启动用户设备上的默认SMS应用程序。为此,我调用startActivity(new Intent(Intent.ACTION\u SENDTO,Uri.parse(“smsto:123456”))。SMS应用程序正确打开,但当用户按下后退按钮时,我看到不一致的行为: 在运行安卓7的模拟器上,该控件会像预期的那样返回到我的应用程序中 在运行Android 6的仿真器上,后退按钮执行“向上”操作,我现在在短信列表中。如果我再次按下后退按钮,我会进入主屏幕,我必须重新启动我的应

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

  • 在运行安卓7的模拟器上,该控件会像预期的那样返回到我的应用程序中
  • 在运行Android 6的仿真器上,后退按钮执行“向上”操作,我现在在短信列表中。如果我再次按下后退按钮,我会进入主屏幕,我必须重新启动我的应用程序
对于我这个用户来说,Android 6中的行为是出人意料的。如果应用程序A启动应用程序B,则无论应用程序B是否执行“向上”操作,向后推都应该返回到应用程序A

因此,我想知道是否有一种方法可以在intent数据/标志中指定,在已启动的活动中按下后退按钮将使用户返回“starter”活动


我尝试过使用
startActivityForResult
但没有效果。

此行为通常可以通过意图标志控制,例如:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
应按预期行事

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

在OnePlus one/Android M上测试时,如果我使用
消息
应用程序作为默认短信应用程序,或者使用Google Play的
谷歌消息
应用程序,我会得到两种不同的场景

在第一个场景中,后退按钮返回到外部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主活动,并且不会t您的。

此行为通常可以通过意图标志控制,例如:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
应按预期行事

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

在OnePlus one/Android M上测试时,如果我使用
消息
应用程序作为默认短信应用程序,或者使用Google Play的
谷歌消息
应用程序,我会得到两种不同的场景

在第一个场景中,后退按钮返回到外部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主活动,并且不会这不是你的