如何在安卓系统中通过编程方式启动主屏幕

23
我想在我的应用程序中启动Android的主屏幕,主要目标是在用户按下一个特定的键时向用户显示所有应用程序。实际上,方法并不重要。有任何想法可以实现吗?
9个回答

59

这里是启动HomeActivity的代码

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

1
谢谢,但我想要打开屏幕,向用户展示带有图标的应用程序。我在说“主屏幕”时是指这个。 - sjor
是的,那就是他所说的。 - grepsedawk
这段代码在Redmi Note 5 Pro MIUI Global 11.0.3版本中不再起作用。有人知道任何解决办法吗? - Sudipto Mukherjee
嗨,@SudiptoMukherjee,你有找到关于这个问题的任何信息吗?我在三星S20+ Android 11上遇到了同样的问题。 - amit semwal

11

你在一些答案上发表的评论表明你实际上想启动Launcher(如果是这种情况,您可能需要更新标题)。要做到这一点,使用Anand提出的启动主页活动的相同方法。

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

1
奇怪的事情打开了我的短信应用。 - rekire
3
这只是打开一个应用程序(或显示具有“启动器”类别的应用程序列表),这是大多数应用。它解释了rekire报告的行为。 - pents90

6
在Android中没有显示应用程序和它们图标的屏幕。你想到的可能是一些主屏幕的功能。没有标准化的Intent来触发这个功能的出现,也没有要求主屏幕必须有这样的功能。你可以自己编写一个。这是一个示例项目,展示了可启动活动列表: 这里

您好,我需要您的帮助。我尝试创建一个样例屏幕锁定程序,它运行良好。但是我的问题是,在屏幕锁定后,它会导航到设备默认主页。当我点击主页按钮时,它会启动我的启动器,但我需要在解锁后显示默认主页。请问我该如何实现呢? - Aerrow

4
尝试像这样点击返回按钮,您将转到主屏幕/ ...
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Display confirmation here, finish() activity.
        Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(startMain);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

2

这里的解决方案都对我无效...

通过使用以下代码,我成功解决了问题

PackageManager pm = getPackageManager();
Intent i = new Intent("android.intent.action.MAIN");
i.addCategory("android.intent.category.HOME");
List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
if (lst != null) {
   for (ResolveInfo resolveInfo : lst) {
       try {
       Intent home = new Intent("android.intent.action.MAIN");
       home.addCategory("android.intent.category.HOME");
       home.setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
       startActivity(home);
       break;
       } catch (Throwable t) {
           t.printStackTrace();
       }
   }
}

来源于:https://dev59.com/g2HVa4cB1Zd3GeqPpr_q#16483596

希望这对某些人有所帮助。


1

我已经使用一行代码实现了它

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

它的行为类似于主页按钮。

1

我不确定我是否完全理解你想做什么!但是如果你的意思是希望用户能够通过在你的应用程序内点击来打开另一个应用程序,那么你应该查看 "intent"。 在 Eclipse 中运行API DEMO 示例代码,然后运行 App -> Intents。


1

我觉得我来晚了,但我有一个类似的问题。这里给出的答案会启动一个选择菜单,让您选择Launcher。如果您的代码中有多个Launcher,则此处的答案:https://dev59.com/M17Va4cB1Zd3GeqPIlPP#8666155 可能会有所帮助。这将直接启动Android的默认主屏幕。


0

这对我来说很有效!

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

有人能解释一下为什么我们需要这个吗?

startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

顺便说一下,这就是我在寻找的东西

moveTaskToBack(true);

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