【问题标题】:Application closing on back button after viewing wireless setting by Intent.ACTION_WIRELESS_SETTING通过 Intent.ACTION_WIRELESS_SETTING 查看无线设置后应用程序关闭后退按钮
【发布时间】:2014-07-11 13:27:14
【问题描述】:

类似于this 问题,我在我的登录活动中添加了no history flag。另一方面,我在登录活动中有一个按钮来显示无线设置。当我按下无线设置意图时,应用程序关闭!

我怎样才能没有历史标志阻止应用程序关闭?

【问题讨论】:

  • 这里只是一个疯狂的猜测,你试过startActivityForResult吗?即使您没有读取任何结果,它也可能会强制系统保留您的活动。
  • @Budius 感谢您的解决方案,但请参阅我的回答。
  • @Budius 你相信我我的解决方案(singleTop)现在不再工作了!我什么都不改变! :|当然我不想使用singleInstance。它可以 100% 工作,但文档说“这是一种非常专业的模式,只能在完全作为一个活动实现的应用程序中使用。”
  • @Budius 你的解决方案不起作用:(
  • 对于一些新的其他人,我不知道我是否超出了主题,但下面的链接可能包含这个问题的答案。 stackoverflow.com/a/7774898/6128863

标签: android android-intent android-activity activity-lifecycle


【解决方案1】:

当您启动另一个活动时,您的登录活动使用无历史标志完成。在启动无线设置旁边的其他活动时,您要么必须将无线设置移动到另一个活动,要么在登录活动中调用完成。如果您在登录时保留无线按钮,则无法使用任何历史记录。您必须设置一个标志来指示是否正在启动设置无线设置,如果此标志为 false,则在 onStop 中调用 finish()。

在您的登录活动中

private boolean mShowSetting;

在 onStop() 中

if (!mShowSetting)
{
    finish();
}

在你启动activity的方法中显示设置

mShowSetting = true;

在你的 onResume 中你必须设置

mShowSetting = false;

【讨论】:

  • 将我的无线设置按钮移到哪里?!启动画面?!首先显示一个启动画面,然后是一个登录页面,并显示一个没有互联网连接的 alertDialog,打开它。所以你说它可以没有历史标志并显示一些系统意图并返回到最后一个活动,我应该改变我的场景?!
  • 不,如果您保持无线按钮,您的登录中不能没有历史标志。如果 ShowSetting 的标志为 false,您必须在登录 onStop() 活动中调用 finish()。我编辑了我的答案以使我的答案更清楚。
  • 在您的启动画面中,您可以检查连接,如果没有连接,则显示另一个活动,通知用户没有互联网连接和一个用于设置的按钮。当用户按下按钮进入设置后此活动返回时,您可以有一个循环检查连接一段时间,因为连接没有立即建立,然后启动登录活动。如果您以这种方式实现,那么您可以保留无历史标志。
  • 当我这样做时,显示无线设置并单击返回按钮后,应用程序关闭!但我想输入用户名和密码登录。
  • 做什么?你必须更具体。
【解决方案2】:

更新:此解决方案不起作用!不知道为什么?

将launchMode添加到清单中的登录活动,如下所示:

<activity android:name="Login" android:noHistory="true" android:launchMode="singleTop" />

如果 Activity 的实例已经存在于目标任务的顶部,系统会通过调用其 onNewIntent() 方法将 Intent 路由到该实例,而不是创建 Activity 的新实例。

https://developer.android.com/guide/topics/manifest/activity-element.html

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多