以编程方式启动默认Android启动器

mwg9r5ms  于 2022-11-20  发布在  Android
关注(0)|答案(5)|浏览(202)

我正在寻找一种方法来启动默认的android启动程序,也许像下面的代码一样。或者我必须添加一些东西到清单文件?谢谢!

Intent intent = new Intent();
intent.setClassName("com.android.launcher", "Launcher");
startActivity(intent);
p8ekf7hl

p8ekf7hl1#

你试过这个吗?

startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER));

(我自己还没有试过,因为我的用例比较复杂--我已经更换了启动器,我想调用 * 旧 * 启动器......)
我还发现,您可以使用包管理器来查看所有符合Intent过滤条件的Activity。例如,如果您想查找所有标记为home默认home Activity的Activity,请使用以下命令:

Intent intent=null;
final PackageManager packageManager=getPackageManager();
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY))
{
    if(!getPackageName().equals(resolveInfo.activityInfo.packageName))  //if this activity is not in our activity (in other words, it's another default home screen)
    {
        intent=packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName));
        break;
    }
}

请注意,我已经替换了设备上的默认主屏幕---这就是为什么我必须确保找到的Activity不是正在运行的Activity!如果您尚未替换默认主Activity,则不需要此检查---只需使用第一个(可能是唯一的)默认主Activity。
(Note我仍然不能从我的启动器启动旧的启动器,也许是因为旧的启动器记录了默认的启动器,也就是我的新启动器,然后简单地调用它。我不知道。但至少它不会崩溃,我猜,如果你没有更换旧的主屏幕,它可能会工作。)

zpf6vheq

zpf6vheq2#

按照Garret Wilson的回答,这里有一行很难看的代码,假设context是您的应用程序上下文:

context.startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setPackage(context.getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY).get(0).activityInfo.packageName));

此代码假定原始系统主活动始终是queryIntentActivities返回的第一个结果,而接受的答案返回不属于正在运行的包的第一个主活动。
目前还不清楚如何干净地获取系统home活动。一些线程提到getPackageManager().resolveActivity(intent, flags)可以用于此,但似乎PackageManager.MATCH_SYSTEM_ONLY不能与此方法一起使用。

qojgxg4l

qojgxg4l3#

=> In kotlin add below code in onDestroy method of appCompactActvity use to make your app as default launcher, 

override fun onDestroy() {
        var intent = Intent(Intent.ACTION_MAIN)
        var packageManager: PackageManager = packageManager
        for (resolveInfo in packageManager.queryIntentActivities(Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY)) {
            if (packageName != resolveInfo.activityInfo.packageName)  //if this activity is not in our activity (in other words, it's another default home screen)
            {
                startActivity(intent)
            }
            break
        }
        super.onDestroy()
    }
mgdq6dx1

mgdq6dx14#

startActivity( Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
hts6caw3

hts6caw35#

我知道这是离题,但这段代码可以打开应用程序启动器,

Intent intentf = new Intent(Intent.ACTION_ALL_APPS);
                //
                //com.android.launcher3.uioverrides.QuickstepLauncher
                //com.android.launcher3.uioverrides.QuickstepLauncher
             //   intentf.setClassName("com.sec.android.app.launcher", "com.android.launcher3.uioverrides.QuickstepLauncher");
                intentf.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intentf);

相关问题