我正在寻找一种以编程方式启动默认的Android Launcher的方法,类似于下面的代码。或者我需要在清单文件中添加一些内容吗?谢谢!
Intent intent = new Intent();
intent.setClassName("com.android.launcher", "Launcher");
startActivity(intent);
我正在寻找一种以编程方式启动默认的Android Launcher的方法,类似于下面的代码。或者我需要在清单文件中添加一些内容吗?谢谢!
Intent intent = new Intent();
intent.setClassName("com.android.launcher", "Launcher");
startActivity(intent);
你试过这个吗?
startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER));
(我的用例有些复杂,我自己还没有尝试过,因为我替换了启动器,并且我想调用 旧的 启动器...)
我还发现你可以使用包管理器来查找所有符合某些意图筛选条件的活动。例如,如果您想找到所有标记为默认主页活动的活动,请使用以下命令:
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。intent.setPackage("com.android.launcher");
- Greg Ennis在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
返回的第一个结果,而被接受的答案则返回不属于正在运行包的第一个主页活动。
仍然不清楚如何清晰地获取系统主页活动。一些线程提到可以使用getPackageManager().resolveActivity(intent, flags)
来实现此目的,但似乎不能使用PackageManager.MATCH_SYSTEM_ONLY
这种方法。
startActivity( Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME));
=> 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()
}
这段代码可以打开应用程序启动器,
Intent intentf = new Intent(Intent.ACTION_ALL_APPS);
intentf.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentf);