Android 内置多个launcher 设置默认launcher

2024-08-22 06:38

本文主要是介绍Android 内置多个launcher 设置默认launcher,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

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”
添加 <uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" />

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.android.launcher3";//包名String ORIGINAL_LAUNCHER_CLASSNAME = "com.android.launcher3.Launcher";	//类名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 framework 使用自定的activity取代默认的Launcher界面

转自 https://blog.csdn.net/jkcomkl/article/details/84840733

这篇关于Android 内置多个launcher 设置默认launcher的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095527

相关文章

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的