这里总结下我研究这个需求,想出的两种解决方案。

第一种方法最简单暴力只要修改apk的AndroidManifest直接上源码

这里就加了一句android:priority=”2”,这样在开机和按HOME键时候系统intent判断到category.HOME属性后如果有多个此属性apk,则会进入ResolverActivity让用户选择。当你定义了此优先级它其他未定义的都默认为0,所以优先进入了你的activity。

第二种方法需要修改framework源码来强制进入你的launcher

首先ActivityManagerService.java中

boolean startHomeActivityLocked(int userId) {

if (mHeadless) {

// Added because none of the other calls to ensureBootCompleted seem to fire

// when running headless.

ensureBootCompleted();

return false;

}

if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL

&& mTopAction == null) {

// We are running in factory test mode, but unable to find

// the factory test app, so just sit around displaying the

// error message and don't try to start anything.

return false;

}

Intent intent = getHomeIntent();

ActivityInfo aInfo =

resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);

if (aInfo != null) {

//add wwd start

PackageManager pm = mContext.getPackageManager();

Intent newintent = new Intent(Intent.ACTION_MAIN);

newintent.addCategory(Intent.CATEGORY_HOME);

List resolveInfoList = pm.queryIntentActivities(newintent, 0);

//判断带有Intent.CATEGORY_HOME标签的所有activity中如果有你指定的activity则替换

if(resolveInfoList != null){

int size = resolveInfoList.size();

for(int i = 0; i < size; i++){

ResolveInfo rInfo = resolveInfoList.get(i);

if(rInfo.activityInfo.name.equals("com.android.launcher3.Launcher")){

aInfo = rInfo.activityInfo;

}

}

}

//add wwd stop

intent.setComponent(new ComponentName(

aInfo.applicationInfo.packageName, aInfo.name));

// Don't do this if the home app is currently being

// instrumented.

aInfo = new ActivityInfo(aInfo);

aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId);

ProcessRecord app = getProcessRecordLocked(aInfo.processName,

aInfo.applicationInfo.uid, true);

if (app == null || app.instrumentationClass == null) {

intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);

//这里启动你已替换过的activity

mStackSupervisor.startHomeActivity(intent, aInfo);

}

}

return true;

}

这样就把开机homeactivity替换成你想要启动的luncher了。

下面在修改按home键强制退回的launcher

PhoneWindowManager.java

public void init(Context context, IWindowManager windowManager,

WindowManagerFuncs windowManagerFuncs) {

......

mHomeIntent = new Intent(Intent.ACTION_MAIN, null);

mHomeIntent.addCategory(Intent.CATEGORY_HOME);

//add wwd start

ComponentName mHomecom = new ComponentName("com.android.launcher3", "com.android.launcher3.Launcher");

mHomeIntent.setComponent(mHomecom);

//add wwd stop

mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK

| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

......

}

这里添加以上两句让home强制跳转指定launcher就好了。

android开机默认打开指定程序,android 开机默认进入指定Launcher相关推荐

  1. Android Studio 设置打开layout.xml文件的默认视图

    Android Studio 设置打开layout.xml文件的默认视图 Android Studio 设置打开layout.xml文件的默认视图 androd studio 在使用的时候打开我们自己 ...

  2. ubuntu设置开机启动图形应用程序,替换默认图形桌面

    一.前言 无论你想要在ubuntu 12.04(11.10适用)开机启动图形程序,或者非图形程序,相信这篇文章能帮上大忙. 我将根据我的需求讲解我的做法,并解释为什么这么做.完了以后,各位看官根据自己 ...

  3. android打包apk不能安装程序,Android Studio 打包apk后应用未安装

    本文转载地址 http://blog.csdn.net/sinat_14849739/article/details/76383281 前言 Android 要求所有 APK 必须先使用证书进行数字签 ...

  4. android应用内打开apk,【Android】点击应用进而打开base.apk的调用流程再分析

    点击一个应用的时候,会加载其对应的base.apk,我们在AssetManager类的addAssetPath方法中添加堆栈打印, 其调用堆栈为 android.content.res.AssetMa ...

  5. html默认office打开如何更改,怎么设置office默认打开方式,修改office的默认打开方式...

    Q1:怎么把office软件设置为默认的文档打开方式 选中文件,再按shift再按鼠标右键,选打开方式,选择程序,把下方始终使用选择的程序打开这种文件选上,选择office,确定就可以了 Q2:怎样设 ...

  6. html查看器更改默认打开方式,初学者如何设置默认打开方式

    现在的电脑里,图片查看器.音乐播放器和视频播放器有时都不止装了一个,因此在打开这些媒体文件时总是会默认用某个软件打开,但有些时候默认打开方式并不是自己想要的,这就需要自己动手修改了.这些默认打开方式一 ...

  7. android 启动浏览器下载应用程序,Android从浏览器中打开本地应用

    开发中遇到的一些问题特此记录: 1.应用场景一  在浏览器中要求直接打开到安装的应用中 需要在该应用的启动Activity 清单文件中进行配置 android:host="com.baidu ...

  8. android检测是否跳出应用程序,android – 检测应用程序何时打开/恢复

    d60402 here提供的答案以及Hanno Binder使用 Application.registerActivityLifecycleCallbacks()注册活动回调的建议使我得到了这个解决方 ...

  9. android判断是否安装应用程序,android如何判断一个软件是否安装以及打开手机应用商店...

    private boolean isAppInstalled() { PackageInfo packageInfo; try { packageInfo = this.getPackageManag ...

最新文章

  1. TCP/IP详解--第七章
  2. 中粮国际对话国际农民丰收节贸易会 谋定国际农贸现代化
  3. Netbeans自定义mode
  4. matlab程序聚类预测机器学习
  5. 解决pom文件第一行报错(unknown)-亲测有效
  6. Eclipse安装UML 插件
  7. C#/ASP.NET完善的DBHelper,配套Model生成器
  8. 如何用SEGGER工具烧写程序,烧写地址详解
  9. 亿阳信通:结盟微软深化四轮驱动战略
  10. 交换机基础命令(理解交换机基本工作原理)
  11. InvalidOptions: Requested option conflicts with current storage engine option for directoryPerDB
  12. 【t101】小明搬家
  13. 【聆思CSK6 视觉AI开发套件试用】AI控制直流电机转速接口打通
  14. WPF自学手册-读书笔记(二)心法
  15. C语言前驱和后继字母,数据结构(c语言)3.ppt
  16. Fast DDS入门二、Fast DDS在Windows平台的编译安装
  17. 第六届蓝桥杯大赛个人赛省赛Java B组真题
  18. 安徽外国语学院计算机信息管理,2021年安徽外国语学院录取结果查询网址入口及录取结果公布时间...
  19. loj #2509. 「AHOI / HNOI2018」排列
  20. MATLAB 2021b详解

热门文章

  1. Gmail 中出现紫字的怪现象
  2. 频域串联滞后校正matlab,控制工程基础(基于Matlab的线性系统串联校正)
  3. 计算机基础为什么要学word,计算机基础中word教学探讨
  4. 还在自己手写请假流程吗?Activiti7帮你快速请假!!!
  5. 假如你想成为全栈工程师…
  6. VS code编辑器出现open a floder or workspace... (File -> Open Folder)错误
  7. Matlab安装失败问题
  8. SpringBoot、VUE基于国产环境适配开发(国产系统、国产数据库、国产中间件)
  9. 使用OpenCV读取摄像头图像并显示
  10. win10上Steam闪退