android 设置默认launcher 附上代码
来源:互联网 发布:数据库中的模式 编辑:程序博客网 时间:2024/05/01 03:16
当系统初始化完毕后会进入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();
...
具体代码流程:
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 component String 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 mFirstLaunch Slog.d(TAG, "firstLaunch = " + firstLaunch); if(firstLaunch){ mFirstLaunch = true; // do this only for the first boot SystemProperties.set("persist.sys.sw.firstLaunch", "false"); } Slog.d(TAG, "firstLaunch = " + firstLaunch); if(mFirstLaunch){ IPackageManager pm = ActivityThread.getPackageManager(); //清除当前默认launcher ArrayList<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 activity Intent 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 match IntentFilter 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; } //设置默认launcher ComponentName 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); } } } }
0 2
- android 设置默认launcher 附上代码
- android 设置默认launcher 附上代码
- Android 设置默认Launcher
- Android设置默认Launcher
- Android设置默认Launcher
- Android 设置默认Launcher
- Android设置默认Launcher
- Android 设置默认Launcher
- android 设置默认launcher
- Android客制化------设置默认Launcher
- Android MTK 设置默认启动 Launcher
- Android 系统默认自定义launcher权限设置。
- Android设置默认Launcher(源码实现和动态代码实现)
- 清除/设置默认Launcher
- 设置默认Launcher
- android 修改默认Launcher
- Android 将自己的Launcher设置为默认启动
- Android 将自己的Launcher设置为默认启动
- win7下通过cocos2d-x2.1.5创建安卓项目解决方案
- PHP读取文件的常见方法
- poj2376 Cleaning Shifts
- 更改sql server 数据库排序规则
- PHP运行出现Notice : Use of undefined constant 的解决办法
- android 设置默认launcher 附上代码
- OpenCv IplImage 转 cv::Mat
- 画线
- equals方法及对其进行重写
- poj 3262 Protecting the Flowers (贪心)
- 关于学java要掌握的知识问题
- Zigbee 设置信道,PANID,发射功率
- activity跳转时的生命周期
- 分享几个免费Cocos2d-x游戏源码