开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用

2023-11-07

开机默认此app作为launcher首次加载 ,就是设置这个apk为开机向导,并没有设置这个成默认launcher,若此应用是launcher应用那么按返回之后会提示让你选择哪一laucher前提是此应用内置并没有作为launcher应用,就可以用下面的方法。

开机自启,开机自动启动某个指定应用!!!!

方法一:(推荐)但是这个比较慢,开机已经进入系统了但是还有过好一会才会收到广播,它需要完成系统更新之后才接受到

vendor/mediatek/proprietary/packages/apps/SystemUI/ src/com/android/systemui/SystemUIApplication.java

在接受到开机广播的地方,执行跳转,这里是广播接受跳转,可以直接显式启动

IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);

            bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);

            registerReceiver(new BroadcastReceiver() {

下面增加执行操作

一:可以直接显式启动

Intent cIntent=new Intent();

        cIntent.setClassName("lte.trunk.tapp","lte.trunk.tapp.settings.AASSettingActivity");

        cIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                        android.util.Log.d("yantao", "cIntent="+cIntent);

        context.startActivity(cIntent);

二:用PackageManager().getLaunchIntentForPackage方法,可以不用传类名,适合不晓得具体那个activity先出来,只需要有一个包名就可以

Intent cIntent=new Intent();

                cIntent = context.getPackageManager().getLaunchIntentForPackage("lte.trunk.tapp");

                android.util.Log.d("yantao", "cIntent="+cIntent);

                if(cIntent != null){

                cIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    context.startActivity(cIntent);

                } else {

                    android.util.Log.d("yantao", "getLaunchIntentForPackage failed");

                }

O版本!o以上不起作用

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

Home Activity 在上面的ActivityManagerService开启之后,会调用finishBooting()函数

在这个finishBooting中最后加入如下,这样可以开机指定应用直接进入这个应用,哪怕它是个launcher应用。就这一次首次加载,前面的判断可以不加

if (Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 1) {

+            Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);

+            Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);

+        }

+           Intent cIntent=new Intent();

+            cIntent = mContext.getPackageManager().getLaunchIntentForPackage("com.mcptt");

+            if(cIntent != null){

+                mContext.startActivity(cIntent);

+            } else {

+                android.util.Log.i("yantao", "getLaunchIntentForPackage failed" );+            }

+        //*/                     

上面就是设置这个apk为开机向导,ActivityManagerService中,由于开机向导只在系统第一次启动之前启动,所以开机向导关闭的时候需要将自己设置为不在启动。源码里finishBooting里面有句mAnrManager.writeEvent(AnrManager.EVENT_BOOT_COMPLETED);就是设置不再启动了。然后同时需要告诉系统开机向导已经完成了,需要写入如下属性到系统中(需要系统权限)

Settings.Global.putInt(getActivity().getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);

Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);

然后在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java里面修改别人写的按下电源键后锁死在launcher3了,判断如下,在case KeyEvent.KEYCODE_POWER: {这个case

else{

                        

-                        if(getCurrentActivityName(mContext).equals("com.android.launcher3.Launcher")) {

-                                if (down) {

-                                    interceptPowerKeyDown(event, interactive);

-                                } else {

-                                    interceptPowerKeyUp(event, interactive, canceled);

-                                }

-                        }else{

-                                if (down) {

-                                    Intent intent=new Intent();

-                                    intent.setClassName("com.android.launcher3","com.android.launcher3.Launcher");

-                                    mContext.startActivity(intent);

-                                }

-                        }

他这个意思是如果当前在launcher3,那么这个电源键正常使用,如果不在,那么就强制开启launcher3

我们只需要把这个回退到源码本来就可。就是电源键正常使用

if (down) {

                 interceptPowerKeyDown(event, interactive);

             } else {

                 interceptPowerKeyUp(event, interactive, canceled);

             }

             }

                break;

            }

上面是针对本身不是launcher的应用,如果本身就是launcher应用,那么就把它设置成默认launcher就可以

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

在这个方法里startHomeActivityLocked,源码的最后加入

加入这个更改默认launcher的方法

final PackageManager mPm = mContext.getPackageManager();

       Intent homeIntent=new Intent();

       homeIntent.addCategory(Intent.CATEGORY_HOME);

       homeIntent.setAction(Intent.ACTION_MAIN);

       homeIntent.addCategory(Intent.CATEGORY_DEFAULT);

       ResolveInfo info = mPm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);

       ComponentName DefaultLauncher=new ComponentName("afrizona.maxalerts.rotas","afrizona.maxalerts.rotas.MainActivity");

       ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();

       ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);

       ComponentName[]mHomeComponentSet = new ComponentName[homeActivities.size()];

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

              final ResolveInfo candidate = homeActivities.get(i);

              Log.d(TAG,"homeActivitie: candidate = "+candidate);

              final ActivityInfo activityInfo= candidate.activityInfo;

              ComponentName activityName = new ComponentName(activityInfo.packageName, activityInfo.name);

              mHomeComponentSet[i] = activityName;

       }

       IntentFilter mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);

       mHomeFilter.addCategory(Intent.CATEGORY_HOME);

       mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);

       List<ComponentName>Activities=new ArrayList();

       mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,mHomeComponentSet, DefaultLauncher);

完了别忘了把PhoneWindowManager里面别人强制电源键回launcher3的删了,如果有的话

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用 的相关文章

  • 为什么在大多数开源java项目中局部变量没有被声明为final?

    如果我查看 OpenJDK Hibernate 或 Apache 中的 java 源代码 我还没有看到任何声明为 Final 的局部变量 这表明一些最广泛使用的 java 软件库的开发人员 不要相信final关键字可以提高可读性 不相信它会
  • 不带破折号的 CliBuilder 参数

    使用 Groovy CliBuilder 理想情况下我希望有一个命令行 如下所示 MyProgram groovy CommandName arg1 arg2 arg3 是否可以使用 CliBuilder 解析提取 CommandName
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • Jetty 提供静态内容所需的最少文件集?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • 为什么我在 Java 中收到有关“可能丢失精度”的警告?

    class Test public static void main String args short s 2 s1 200 s2 s2 s s1 error possible loss of precision System out p
  • 如何使用 Java Streams API 将 Map 列表与列表值合并?

    我怎样才能减少Map
  • 如何从Android webview下载文件?

    我下面的代码可以很好地加载 url 页面 并且在搜索歌曲后 当我单击下载链接时 它崩溃了 关于如何让下载管理器与网络视图一起工作的教程并不多 我究竟做错了什么 import java io File import android app A
  • 使用会话空闲超时进行轮询

    我对 Tomcat 中的所有应用程序使用单点登录 我的要求是 我必须轮询应从后端获取的事务状态 但它也不应该影响会话的空闲超时 有人可以建议是否可以做点什么吗 Thanx 我不知道是否有标准方法可以做到这一点 如果没有 你可以写一个过滤器
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • 尝试用Java实现基于文本的Hangman游戏

    我需要检查用户输入的字母以及他们猜测的空格是否位于隐藏单词的特定位置 变量one等于用户猜测的空间索引 而letterGuess是他们猜测的字母 我的代码怎么错了 示例 秘密词是你好 hidden word is 用户猜测h 0 1 2 3
  • 如何在没有 OpenCv Manager 的情况下运行 OpenCV 代码

    我正在使用 OpenCV4Android 版本 2 4 10 并在 Samsung Galayx GT I9300 上测试我的代码 我遇到的问题是 我必须从 Play 商店下载 Opencv Manager 以便我的 opencv 代码运行
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • 如何在 Windows 上使用 Java Hotspot JVM 禁用小型转储 (mdmp) 文件生成

    目前 我有一个已部署的可执行 jar 文件 该文件在崩溃时会创建大型 7 Gb 小型转储文件 我想要一个导致崩溃原因的文本表示 而不是 JVM 状态的二进制文件 我尝试使用中找到的信息这个 CodeRanch 帖子 http www cod
  • 如何在 Android 中不使用 Intent 裁剪图像

    我正在尝试裁剪图像我使用了下面的代码 意图 i new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI i pu
  • 如何在jetpack compose中删除文本基线下方的空间?

    目前我得到这个 但我想要这样的东西 而且 50 和 min 中的文本也应该与顶部对齐 My code Row verticalAlignment Alignment Bottom Text text 18 color MaterialThe
  • Java:易失性足以使类线程安全?

    我有一个关于 Java 中 volatile 语句的问题 请看这个构造的例子 class Master Foo is a class with thread safe methods public volatile Foo foo clas
  • 活动构建变体没有测试工件

    我基于 调试 构建变体创建了一个名为 bitrise 的新构建类型 使用 debug 构建变体时 经过检测的 androidTests 构建并运行良好 但是当我切换到新的 bitrise 构建变体时 出现以下错误 Process finis
  • 项目级别的@PowerMockIgnore

    在 Maven 中运行时 我的 powermock 测试用例出现以下错误 java lang LinkageError loader constraint violation loader instance of org powermock
  • Java编程编译jar

    我有一个文本文件中的java源代码 必须在源代码中输入一些自定义的硬编码变量 然后将其转换为 jar 这是可行的 但是当我运行 jar 时 找不到 Main 类 当我用 WinRAR 解压 jar 文件时 我似乎找不到错误 当我通过 cmd

随机推荐

  • 编程计算并输出加工资后的员工工资。

    某单位马上要加工资 增加金额取决于工龄和现工资两个因素 对于工龄大于等于20年的 如果现工资高于2000元 加200元 否则加180元 对于工龄小于20年的 如果现工资高于1500 加150元 否则加120元 工龄和现工资从键盘输入 编程计
  • VTK failed after update Lights 16 OpenGL errors detected 错误

    在读取 VTK文件的时候出现如标题错误 代码如下 1 include
  • 【粗频率校正/DPSK/matlab】Discrete-time PSK(离散相移键控)粗细频率校正原理讲解,以及使用matlab代码实现

    当接收机中用于下变频的本振 LO 与发射机中的本振不同步时 通常会发生载波频率偏移 这主要是由于杂质 电气噪声和温差等自然效应 我们需要使用粗或者细频率校正去调整我们接收到的信号 原理解析 粗频率校正 Coarse Frequency co
  • 4,引擎初始化--(5)初始化actor--2,注册ActorComponent(学习资料来源于UE4游戏框架)

    1 将所属world的组件保存到组件中 2 调用组件的OnRegister 函数 初步注册 从内到外如图所示 3 如果该组件是PrimitiveComponent 则在注册后创建一个FPrimitiveSceneProxy 并添加到FSce
  • linux后台执行命令:&和nohup

    当我们在终端或控制台工作时 可能不希望由于运行一个作业而占住了屏幕 因为可能还有更重要的事情要做 比如阅读电子邮件 对于密集访问磁盘的进程 我们更希望它能够在每天的非负荷高峰时间段运行 例如凌晨 为了使这些进程能够在后台运行 也就是说不在终
  • Windows远程deepin系统

    1 deepin安装xrdp软件 apt get install xrdp 注意 出现无法定位软件包错误的 更改deepin源 更改deepin源 跟改源之前最好备份 备份命令cp sources list etc apt sources
  • openpyxl表格

    import openpyxl 引入模块 wb openpyxl Workbook 实例化表格方法 word wb active 把表格赋值给word word A1 1 这样就可以用word来操作表格了 可以写入数据 word B2 LO
  • 使用ddt执行数据驱动测试

    所谓数据驱动测试 简单的理解为数据的改变从而驱动自动化测试的执行 最终引起测试结果的改变 通过使用数据驱动测试的方法 可以在需要验证多组数据测试场景中 使用外部数据源实现对输入输出与期望值的参数化 避免在测试中使用硬编码的数据 这种方法对于
  • eslint报错解决方案:--fix的使用

    vue项目中使用eslint来做代码规范检查时 在每次运行项目后就会指出你代码中的各种不规范的地方 各种红彤彤的报错 我滴妈 虽说不影响项目运行 但是作为一个程序猿 我接受不了 解决方案 遇到问题 不要慌 报错信息放到百度翻译看一看先 可以
  • 实验一:时间数据可视化

    上图代码如下 import pyecharts options as opts from pyecharts charts import Polar Page import csv filename hot dog places csv d
  • [转]详述DHCP服务器的三种IP分配方式

    DHCP就是动态主机配置协议 Dynamic Host Configuration Protocol 它的目的就是为了减轻TCP IP网络的规划 管理和维护的负担 解决IP地址空间缺乏问题 这种网络服务有利于对网络中的客户机IP地址进行有效
  • 函数参数是右值引用类型,能够接受什么样的参数输入

    假设我们有一个函数 class Data void func Data data 那么func能接收什么样的参数输入 情形一 Data data func data Error cannot bind Data lvalue to Data
  • JAVA项目流程

    1 项目启动 1 项目组成立 公司成员 客户成员 2 制定项目预期目标 3 制定项目计划周期 4 建立好项目组成员沟通机制 2 需求调研 1 创建调研计划 协调调研时间 2 收集客户资料 获取客户需求 所有的资料都需要保留一份 资料中存疑的
  • keras的backend 设置 tensorflow,theano

    win7 系统环境安装步骤 1 首先是安装Python 建议安装anaconda 2 安装完anaconda后打开anaconda promp命令行promp 输入conda list 可以看到已经安装的库以及版本等信息 注意此时没有ker
  • Zookeeper - 本地安装与参数配置

    目录 零 前置 1 工作机制 2 Zookeeper特点 3 数据结构 一 下载 二 本地安装 1 安装JDK 2 安装Zookeeper 三 运行测试 很尴尬的一点 手贱把Zookeeper拼错了 大家自己注意一下 当然你也可以选择一直复
  • chromium主要功能模块描述

    1 base 基础模块 放最基本的操作封装 2 ash aura she ll 3 breakpad 崩溃捕捉 4 chrome 所有功能都在该模块工程下 5 cryoto 加密和解密 6 nataive libary 代替activex的
  • 更改npm镜像源

    看后面那么多404想必是因为网络引起 安装出错 于是于是去查了一下 原来npm 也像Linux的软件一样有自己的镜像源 感觉不错 虽然也存在依赖关系 非常不错 下面就是切换npm镜像源的方法有三种 1 通过config命令 npm conf
  • 扫描效果图像增强

    原文 https blog csdn net pleasecallmewhy article details 8776998 感谢 机器视觉 图像算法 https home cnblogs com u cvdream 没有扫描仪怎么办 可以
  • FreeBSD12.1系统安装完成后配置ssh远程连接

    默认情况下 freebsd12 1系统安装完之后 是禁止root通过ssh远程登录的 freebsd12 1只允许普通用户通过ssh登录 这可能也是官方推荐的做法 相对来说更加安全 但xshell工具无法用普通用户通过ssh远程连接 需要开
  • 开机直接进入该应用作为默认launcher(霸屏)或者开机自启指定应用

    开机默认此app作为launcher首次加载 就是设置这个apk为开机向导 并没有设置这个成默认launcher 若此应用是launcher应用那么按返回之后会提示让你选择哪一laucher前提是此应用内置并没有作为launcher应用 就