以编程方式返回主屏幕

80

当用户点击按钮时,我想在Android中通过编程方式返回主屏幕。如何实现?


一种简单的方法是重写onBackPressed或通过keyEvent = Backpressed并在其上调用onHomePressed。然后它将像homePressed一样运行。 - Zar E Ahmer
6个回答

185
你可以通过一个Intent来实现这个。
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

这个Intent将启动用户定义的launcher应用程序。请小心使用,因为如果用户没有预期此操作,它会让你的应用程序看起来像是崩溃了。

如果您想从您的应用程序中构建一个“退出”按钮,请阅读这篇关于Android中退出按钮的文章。


3
我读过在应用程序中这样做是非常错误的。但为什么人们会这么说呢?我知道我在哪里使用它。而且看起来这似乎是我想要做的唯一事情。那么使用它可以吗? - Sudarshan Bhat
6
对我来说最简单的方法是:startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));(似乎不需要FLAG_ACTIVITY_NEW_TASK)。 - Jonik
这是一个较旧的线程,但尽管如此,返回到之前的Activity并不起作用。是什么导致了这种情况? - portfoliobuilder
2
@portfoliobuilder,你只需要移除FLAG_ACTIVITY_NEW_TASK。 - user802421
这个让我省了很多麻烦。 - r3dm4n
显示剩余5条评论

33

一行代码解决方案

moveTaskToBack(true); //activity.moveTaskToBack(true);

它将会表现得像按下主页按钮一样


它正在工作... 这是一个好方法吗.. 它会在每种情况下都起作用吗? - Prabs
在我的情况下,它工作得很好。我不太确定它是否适用于所有情况。 - Zar E Ahmer
1
对我来说很好用(Android 6.x) - dangling_refrenz
1
对我也很有效(Android 7.x)。 - Sinan Ceylan
这将关闭我的应用程序(Android 9.x) - Heetola

11

Janusz的回答非常好。

我想补充的是,你可以在没有当前活动引用的情况下返回到主屏幕,但这个内容有点长,不适合作为评论。

由于startActivity(),Janusz的代码需要从一个Activity或Fragment中调用。

为了解决这个问题,你可以在应用程序文件中存储对应用程序上下文的静态引用:

public class YourApplication extends Application
{

    private static Context mAppContext;

    public void onCreate()
    {
        super.onCreate();
        ...
        YourApplication.mAppContext = getApplicationContext();
    }

    public static Context getContext()
    {
        return mAppContext;
    }

}

现在你可以从你的应用程序中的任何类(不仅限于Activity、Fragment或其他类,而是有当前Activity的引用)将用户发送到设备主屏幕,但你需要自己决定这是好事还是坏事:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
YourApplication.getContext().startActivity(startMain);

1

来自Android开发者网站

以下是可以使用这些附加参数指定为意图的其他操作示例:

* ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

3
询问一些可以通过快速的谷歌搜索和查找文档来回答的问题是完全没有问题的。如果问题包含正确的关键字,它很快就会在谷歌的第一页上显示,这比查找文档要快得多,也能更快地找到正确的信息和示例代码。我是一名有些训练有素的安卓程序员,但我需要谷歌并跳过一两页才能回答这个问题。如果这个问题的答案在这里,那将是非常好的,因为它可以被编辑、改进、更新和评估。 - Janusz

1
startActivity((new Intent(Intent.ACTION_MAIN)).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

0

我知道可能有点晚了,但我也遇到了同样的问题,这是我是如何解决它的。回到你的MainActivity,你需要从现有的Activity中添加标志。

    final Intent mainActivity = new Intent(this, MainActivity.class);
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

现在,当您按下返回按钮时,如果MainActivity是活动状态,则会返回到主屏幕。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接