【问题标题】:open android own launcher from my application从我的应用程序中打开 android 自己的启动器
【发布时间】:2012-01-21 01:42:05
【问题描述】:

嗨,寻找这个简单的问题已经 2 天了。我想从我的应用程序启动 Android 自己的启动器,即使它没有设置为默认值。

   final PackageManager packageManager=getPackageManager();
   Intent intent = packageManager.getLaunchIntentForPackage("com.android.launcher");

这对于 Android 自己的启动器返回 null,但如果我尝试自定义启动器会成功给我

【问题讨论】:

  • 我正在开发自定义主屏幕,我想在需要时启动默认主屏幕,我面临着同样的问题。

标签: android launcher homescreen package-managers


【解决方案1】:

您确定您的设备上安装了默认的Google Android Launcher 吗?如果不是,那真的是NULL

【讨论】:

【解决方案2】:

在研究getLaunchIntentForPackage的源代码后找到了解决方案。根据文档,

当前的实现将首先在 类别 CATEGORY_INFO,下一个用于类别中的主要活动 CATEGORY_LAUNCHER,如果都找不到则返回 null。

所以,该函数不查找 CATEGORY_HOME,我按照以下方式重写了它,它运行良好。

Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
intentToResolve.addCategory(Intent.CATEGORY_HOME);
intentToResolve.setPackage("com.android.launcher");
ResolveInfo ri = getPackageManager().resolveActivity(intentToResolve, 0);
if (ri != null) 
{
    Intent intent = new Intent(intentToResolve);
    intent.setClassName(ri.activityInfo.applicationInfo.packageName, ri.activityInfo.name);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}

【讨论】:

  • 我尝试对“com.android.phone”使用相同的方法,但由于某种原因它不起作用。有输入吗?
  • 这会将我带到主屏幕而不是应用程序启动器屏幕
  • 我遇到了与@13hsoj 相同的问题,其中 ri 始终为空
  • @Bruce 你是在为 com.android.phone 还是为 com.android.launcher 尝试它
  • 这段代码应该添加到哪里?能否请您也提一下班级名称?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多