【问题标题】:Force external app launched via startActivity to go back to my app强制通过 startActivity 启动的外部应用程序返回到我的应用程序
【发布时间】:2016-09-28 09:55:11
【问题描述】:

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

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

对于作为用户的我来说,Android 6 中的行为是出乎意料的。如果应用 A 启动应用 B,无论应用 B 是否执行“向上”操作,推回都应始终返回到应用 A。

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

我尝试使用startActivityForResult 无济于事。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    这种行为通常可以通过 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,它自己调用startActivityConversationListActivity,然后在同一任务中打开ConversationActivity,所以返回按钮返回 SMS 主 Activity,而不是您的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多