android 设置默认launcher 附上代码

当系统初始化完毕后会进入homeactivity:具体代码流程:ActivityManagerService.java –>public void systemReady(final Runnable goingCallback) {…mMainStack.resumeTopActivityLocked(null);…}ActivityStack.java final boolean resumeTopActivityLocked(ActivityRecord prev) { return resumeTopActivityLocked(prev, null); }final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) {…return mService.startHomeActivityLocked(mCurrentUser); //开始启动homeactivity了,,…}然后我们可以在最开始加入一个自己写的接口,来设置默认launcher:boolean startHomeActivityLocked(int userId) { … setDefaultLauncher(); …

}

private void setDefaultLauncher() {// get default componentString packageName = "com.android.launcher";//默认launcher包名String className = "com.android.launcher2.Launcher";////默认launcher入口Slog.i(TAG, "defautl packageName = " + packageName + ", default className = " + className);if ((packageName != null && packageName.trim().length() > 1) && (className != null && className.trim().length() > 0)) {boolean firstLaunch = SystemProperties.getBoolean("persist.sys.sw.firstLaunch", true); //只做一次 可以注意这几个变量firstLaunch mFirstLaunchSlog.d(TAG, "firstLaunch = " + firstLaunch);if(firstLaunch){mFirstLaunch = true;// do this only for the first bootSystemProperties.set("persist.sys.sw.firstLaunch", "false");}Slog.d(TAG, "firstLaunch = " + firstLaunch);if(mFirstLaunch){IPackageManager pm = ActivityThread.getPackageManager();//清除当前默认launcherArrayList<IntentFilter> intentList = new ArrayList<IntentFilter>();ArrayList<ComponentName> cnList = new ArrayList<ComponentName>();mContext.getPackageManager().getPreferredActivities(intentList, cnList, null);IntentFilter dhIF;for(int i = 0; i < cnList.size(); i++){dhIF = intentList.get(i);if(dhIF.hasAction(Intent.ACTION_MAIN) &&dhIF.hasCategory(Intent.CATEGORY_HOME)){mContext.getPackageManager().clearPackagePreferredActivities(cnList.get(i).getPackageName());}}//获取所有launcher activityIntent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);List<ResolveInfo> list = new ArrayList<ResolveInfo>();try{list = pm.queryIntentActivities(intent,intent.resolveTypeIfNeeded(mContext.getContentResolver()),PackageManager.MATCH_DEFAULT_ONLY,UserHandle.getCallingUserId());}catch (RemoteException e) {throw new RuntimeException("Package manager has died", e);}// get all components and the best matchIntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_MAIN);filter.addCategory(Intent.CATEGORY_HOME);filter.addCategory(Intent.CATEGORY_DEFAULT);final int N = list.size();Slog.d(TAG, "N:::::hyhyhyhy:::: = " + N);ComponentName[] set = new ComponentName[N];int bestMatch = 0;for (int i = 0; i < N; i++){ResolveInfo r = list.get(i);set[i] = new ComponentName(r.activityInfo.packageName,r.activityInfo.name);Slog.d(TAG, "r.activityInfo.packageName:::::hyhyhyhy:::: = " + r.activityInfo.packageName);Slog.d(TAG, "r.activityInfo.name:::::hyhyhyhy:::: = " + r.activityInfo.name);if (r.match > bestMatch) bestMatch = r.match;}//设置默认launcherComponentName launcher = new ComponentName(packageName, className);try{pm.addPreferredActivity(filter, bestMatch, set, launcher,UserHandle.getCallingUserId());} catch (RemoteException e) {throw new RuntimeException("Package manager has died", e);}}}}

失败是成功的亲娘,没有失败哪来的成功呢?诺贝尔如果不经历千万次的失败,

android 设置默认launcher 附上代码

相关文章:

你感兴趣的文章:

标签云: