Android设置默认launcher

  • 前言
    • 高通 code
    • MTK code
    • 结语

前言

launcher因为开机即启动,若添加默认launcher过早则可能导致其他进程崩溃,添加过晚则起不到启动默认设置的效果且会弹出选择launcher的提示框.
查看了一些其他的修改方法,均需在ActivityManagerService.java的startHomeActivityLocked添加默认启动,但是发现添加后,若系统存在多个launcher apk,则仍然会弹出launcher选择提示框.经过几天折腾,发现一个比较简便且改动不大的方法.
主要思路是发现某些OS自带的apk也添加了

<category android:name="android.intent.category.HOME" />

的响应,且设置了 priority=“1”,则可以保证该应用在Launcher启动前就运行起来.

以下为具体code修改.

高通 code

7.1版本
若有编译 SetupWizard则使用此方法,无则使用 mtk code方法.
vendor\qcom\proprietary\qrdplus\Extension\apps\SetupWizard\src\com\qualcomm\qti\setupwizard\SetupWelcomeActivity.java

private static final String ORIGINAL_LAUNCHER_PACKAGENAME = "com.android.launcher3";//设置为定制的包名
private static final String ORIGINAL_LAUNCHER_CLASSNAME = "com.android.launcher3.Launcher";//设置为定制的类名

MTK code

6.0版本
packages\apps\Provision\AndroidManifest.xml
添加 android:sharedUserId=“android.uid.system”

packages\apps\Provision\src\com\android\provision\DefaultActivity.java
onCreate()方法添加

 if(SystemProperties.getInt("persist.sys.defualt.launcher",0)==0)//一次性使用系统变量,为免后续重复调用 initLauncher();

添加initLauncher()方法.

 public void initLauncher (){String ORIGINAL_LAUNCHER_PACKAGENAME = "com.xxx.ilauncher";//包名String ORIGINAL_LAUNCHER_CLASSNAME = "com.xxx.ilauncher.MainActivity"; //类名Intent queryIntent = new Intent();final PackageManager mPm = this.getPackageManager();queryIntent.addCategory(Intent.CATEGORY_HOME);queryIntent.setAction(Intent.ACTION_MAIN);List<ResolveInfo> homeActivities = mPm.queryIntentActivities(queryIntent, 0);if(homeActivities == null) {return ;}ComponentName defaultLauncher = new ComponentName(ORIGINAL_LAUNCHER_PACKAGENAME,ORIGINAL_LAUNCHER_CLASSNAME);int activityNum = homeActivities.size();ComponentName[] set = new ComponentName[activityNum];int defaultMatch = -1;for(int i = 0; i < activityNum; i++){ResolveInfo info = homeActivities.get(i);set[i] = new ComponentName(info.activityInfo.packageName, info.activityInfo.name);if(ORIGINAL_LAUNCHER_CLASSNAME.equals(info.activityInfo.name)&& ORIGINAL_LAUNCHER_PACKAGENAME.equals(info.activityInfo.packageName)){defaultMatch = info.match;}}//if Launcher is not found, do not set anythingif(defaultMatch == -1){return ;}IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_MAIN);filter.addCategory(Intent.CATEGORY_HOME);filter.addCategory(Intent.CATEGORY_DEFAULT);mPm.addPreferredActivity(filter, defaultMatch, set, defaultLauncher);SystemProperties.set("persist.sys.defualt.launcher",String.valueOf(1));}

结语

 高通平台8.0版本默认未将SetupWizard 内置,则也可参照mtk code方法修改packages\apps\Provision 中代码即可.Provision为4.4平台即内置的应用,其他平台皆可使用该方法.

Android内置多个launcher设置默认launcher相关推荐

  1. Android 内置多个launcher 设置默认launcher

    前言 launcher因为开机即启动,若添加默认launcher过早则可能导致其他进程崩溃,添加过晚则起不到启动默认 设置的效果且会弹出选择launcher的提示框. 查看了一些其他的修改方法,均需在 ...

  2. Android 13 内置搜狗输入并设置默认输入法

    1.首先内置搜狗输入法app 在目录vendor/rockchip/common/apps 下新建文件夹SougouInput 并将搜狗输入法apk拷贝到SougouInput文件夹下 并在Sougo ...

  3. android+launcher+字体大小,Android设置默认Launcher

    当系统存在多个launcher时,若没有设置默认launcher,开机启动后会弹出提示框,罗列所有launcher,用户选择并设置了默认launcher后,按home键以及以后重启都会进入默认的lau ...

  4. Android (内置)预装应用

    Android (内置)预装应用 参考Android 系统如何预装第三方应用以及常见问题汇集. 系统开机时会进行应用的加载(或者说安装),所以我们大体上来说就是需要把要内置的apk放到指定目录就行.最 ...

  5. android百度输入法源码,Android内置第三方输入法

    Android内置第三方输入法 本篇讲诉如何再安卓源码中内置第三方输入法,并设为默认输入法启动,以及过程中可能引起的一些其他系统Bug处理: 内置输入法关联源码 各第三方输入法ID 以讯飞为例内置方法 ...

  6. Win7下的内置FTP组件的设置详解

    Win7下的内置FTP组件的设置详解 在局域网中共享文件,FTP是比较方便的方案之一.Win7内部集成了FTP,只是设置起来颇费一番功夫.着文以记之. 一.安装FTP组件 由于Win7默认没有安装FT ...

  7. android 截屏 简书,Android 内置应用截屏方法

    Android 中,内置应用如何更好的截屏 在开发系统应用的时候,有时候需要用到截屏,因为 View.getDrawingCache() 截不到状态栏,所以这个方案不理想 这有一个更好的方案,就是用 ...

  8. Android 内置RTSP/RTMP服务器,实现局域网内视频推流与播放

    1. 背景 工作中有一个需求,在同一个局域网内, 需要将Android平板端(车机)上的摄像头上的画面,实时传输到手机上进行播放. 对于这个需求,我们想到了用RTSP/RTMP进行推流,然后在手机端拉 ...

  9. 安卓 linux launcher,关于android使用自己的launcher替换默认launcher的方法

    关于android使用自己的launcher替换默认launcher的方法 发布时间:2020-07-19 19:14:43 来源:51CTO 阅读:1274 作者:GaoNeil 关于android ...

最新文章

  1. HashSet中的add()方法( 五 )(详尽版)
  2. 十一月工作小记--上线前的冲刺
  3. 为特定用户创建监牢 chroot
  4. mockito 外部接口_【IDEA开发SpringBoot2.0】使用Mockito进行常规接口测试#05
  5. Linux免设置路由端口映射,2014/04/01 演示中设置linux路由器、端口过滤的使用、路由设置...
  6. SQL Server大量数据秒级插入/新增/删除
  7. java word转html 空指针_Windows 内核漏洞学习—空指针解引用
  8. Linux安装配置redis 、启动redis、redis设置密码
  9. 你必须知道:localStorage、sessionStorage 和 Cookie 区别在什么地方
  10. 学习React基本渲染数据操作(-)
  11. YOLO算法原理详解
  12. 流水灯程序总结:关于Crol和cror的用法
  13. svc预测概率_Kaggle平台Titanic生存率预测项目(TOP3%)
  14. FreeKD:Free-direction Knowledge Distillation for Graph Neural Networks
  15. html播放h265,Web 播放 H.265视频
  16. 学习一下怎么加入自己的图片,用QQShow做一下试验~~~~~~~~~~
  17. 【Unity3D】UGUI之Toggle
  18. python编写米字格的步骤_1米字格制作步骤
  19. Excel常用技巧(1)——经纬度度分秒转换十进制度格式
  20. what's the meaning of Shell?

热门文章

  1. 局域网限速软件_百度网盘竟良心发现,下载不再限速?
  2. 赤兔WiFi分销小程序源码,一键连接wifi小程序开发wifi大师软件源码
  3. EC20、EC600s-CN 短信坑
  4. 中国培训行业营销模式与发展对策建议报告2022版
  5. 迅捷PDF分割器如何将PDF拆分为多个文档
  6. socket接口测试工具_接口测试是什么?如何做好接口测试?
  7. JetBrains公司系列IDE开发工具通用初始配置推荐(Android Studio、InterlliJ、PHPStorm、CLion、Webstorm等)
  8. C语言程序——字符的输入和输出
  9. 常用JDBC数据库驱动包和类名
  10. centos异常,报错:Unmount and run xfs_repair