需求:不去掉系统自带launcher的前提下,默认启动指定应用作为launcher
现象:应用中带有属性"android.intent.category.HOME",开机会弹出选择界面
思路:跳过选择界面,直接选中要启动的launcher并直接进入
1.选择界面流程分析
使用adb命令抓取到launcher选择提示框是一个activity,路径是frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
此Activity会获取系统中所有的Home app,并根据系统的设置情况显示如上界面。此类中有一个内部类ResolveListAdapter该类继承自BaseAdapter,该类是Home app选择界面的数据适配器。
ResolveListAdapter会在ResolverActivity的onCreate方法中被初始化并会传入一个ResolveInfo类型的List,ResolveListAdapter根据会传入的List初始化一个List mList ,用户的点击事件都会在ResolveListAdapter获取数据。
用户点击”ALWAYS”的事件发生在ResolverActivity的onButtonClick 方法中,此方法会获取选中的Item的position、或者获取用户上一次启动的Home app的,mAlwaysUseOption代表用户选中的是否为历史选择,并调用startSelected。
onButtonClick()方法
public void onButtonClick(View v) {
final int id = v.getId();
startSe