以编程方式转到主屏幕


75

当用户单击按钮时,我想在Android中以编程方式转到主屏幕。如何才能做到这一点?


13
请接受您的一些旧问题。
nothrow

一种简单的方法是重写onBackPressed或通过keyEvent = Backpressed并对其调用onHomePressed。那么它的行为就像homePressed
AndroidGeek

Answers:


172

您可以通过Intent实现

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

该意图将启动用户定义的启动器应用程序。请小心,因为如果用户不希望这样做,您的应用程序将崩溃。

如果您希望此操作从您的应用中构建退出按钮,请阅读有关Android中的退出按钮的文章


3
我读过在App中执行此操作是非常错误的。但是人们为什么这么说呢?我知道我在哪里使用它。看来这是我唯一可以做的事情。那可以使用吗?
Sudarshan Bhat 2012年

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

是什么ACTION_MAIN,并CATAGORY_HOME指什么?
Srujan Barai'1

30

一线解决方案

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

就像按下主页按钮一样


它正在工作..这是一个好方法..在每种情况下都可以工作吗?
Prabs 2015年

在我的情况下,它可以正常工作。我不确定是否在所有情况下都可以工作
AndroidGeek

1
对我来说效果很好(Android 6.x)
dangling_refrenz

1
我也很好用(android 7.x)
Sinan Ceylan

这将关闭我的应用程序(Android 9.x)
Eildosa

11

Janusz的答案很好。

我唯一要添加的内容(对于评论来说有点太长了)是,您可以不参考当前活动就可以转到主屏幕。

由于startActivity(),需要从“活动”或“片段”中调用Janusz的代码

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

public class YourApplication extends Application
{

    private static Context mAppContext;

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

    public static Context getContext()
    {
        return mAppContext;
    }

}

现在,您可以将用户从应用程序中的任何类别(不只是活动,片段或其他类别)发送到设备主屏幕,并引用当前的活动(您可以决定这是好事还是坏事):

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

0

Android开发者网站

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

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

3
有趣的是,提出问题可以通过快速的Google查询和对文档的了解来解决。如果问题中包含正确的关键字,它将很快出现在Google的第一个Google页面上,并使查找正确的信息和示例代码的速度大大加快,然后可以查看文档。我是一位经过某种方式训练有素的android程序员,但我将不得不用google并跳过一两个页面来回答这个问题。如果在此问题的答案可以在这里进行编辑,改进,更新和评分,那就太好了。
Janusz

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活动按钮时,它将返回主屏幕。


0
startActivity((new Intent(Intent.ACTION_MAIN)).addCategory(Intent.CATEGORY_HOME).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.