如何实现Android app开机自启动

2023-11-08

前言

上一篇文章如何实现无界面Android app介绍了如何使app仅在后台运行服务,而这样的app常常需要同时具备开机自启动的功能,接下来讲解一下如何在上一篇文章基础上,再实现app开机自启动功能。

代码实现

AndroidManifest.xml

为了实现开机自启动功能,app需要监听android开机广播,AndroidManifest.xml中需要添加以下权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

然后注册接收系统开机广播消息的广播接收者:

<receiver android:name=".BootReceiver">
	<intent-filter>
		<action android:name="android.intent.action.BOOT_COMPLETED"></action>
	</intent-filter>
</receiver>

完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.bootserviceapp">
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@android:style/Theme.NoDisplay"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".MyService"></service>
        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
    </application>

</manifest>

BootReceiver.java

编写广播接收者代码,广播接收者在收到android开机广播后,启动MainActivity(安卓8.0以上直接启动service无法正常运行,需要先启动activity,在activity里启动service):

package com.example.bootserviceapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootReceiver extends BroadcastReceiver {
    public BootReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("Jason", "BootReceiver start");
        //启动MainActivity
		Intent intent1 = new Intent(context, MainActivity.class);
        intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//添加标记
        context.startActivity(intent1);
        Log.v("Jason", "BootReceiver end");
    }
}

MainActivity.java、MyService.java

MainActivity.java和MyService.java的示例代码参考上一篇文章如何实现无界面Android app即可。

问题解决

如果app自启动失败,可以尝试以下方法进行解决:
1、确认手机管家是否禁止了app自启动,如果被禁用,在手机管家中为app添加自启动权限后,再进行尝试:
在这里插入图片描述
在这里插入图片描述
2、如果app安装在SD卡中,可能会导致接收不到系统的广播消息,这种情况可以在AndroidManifest.xml中添加如下代码,使app只能被安装在内存中:

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

如何实现Android app开机自启动 的相关文章

  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • 在Android中将半径边框绘制到imageview或textview的一个角落

    我需要在我的应用程序中为图像视图或文本视图绘制边框 但我只需要在一个角落绘制它 就像图像一样 我做了一个形状 但我在所有 4 个边上都有边框
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • 如何使用gradle这样的格式更改apk名称?

    当我使用 gradle 构建应用程序时 我想将 app release apk 文件名更改为如下所示 format appname of package name V version code yyMMdd R T explain appn
  • IntentService、Service 或 AsyncTask

    实现这一点的最佳方法是什么 我有一个 Android 应用程序 它将使用我的 python 服务器来允许两部手机之间进行轮流通信 回合意味着他们在一轮开始之前不能互相交谈 一旦他们发送一条消息 他们就不能发送另一条消息 直到对方做出回应 然
  • 在Android内存中存储gif图像

    我对安卓还很陌生 我想将图像保存到内存中 然后从内存中检索图像并将其加载到图像视图中 我已使用以下代码成功将图像存储在内存中 void saveImage String fileName img cnt jpg File file new
  • NumberPicker 的格式化值在单击时消失

    我的 NumberPicker 在setDescendantFocusability FOCUS BLOCK DESCENDANTS 模式和setWrapSelectorWheel false 已关闭 我用一个简单的格式化程序格式化了我的
  • Android/Java 创建辅助类来创建图表

    Goal 创建用于图形生成的辅助类 背景 我有 3 个片段 每个片段收集一些传感器数据 加速度计 陀螺仪 旋转 并使用 GraphView 绘制图表 以下是其中一个片段的代码 该代码当前工作正常 public class Gyroscope
  • 无法从 com.android.aaptcompiler.ParsedResource@ef79973 提取资源

    无法从 com android aaptcompiler ParsedResource ef79973 提取资源 无法从 com android aaptcompiler ParsedResource 4c95ce87 提取资源 C Use
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的
  • 如何将 Google Now 搜索栏添加到我的应用程序中?

    谷歌刚刚将其搜索栏从 Google Now 引入到了 Play 商店应用程序中 如下面的 gif 所示 如何将这个操作栏搜索栏实现到我自己的应用程序中 我想要 style 汉堡动画 从工具栏按钮访问 麦克风按钮 对棒棒糖设备的连锁反应 我已
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 将 firebase auth 与 google app engine 云端点集成

    有人可以指定 使用一些示例代码 如何验证谷歌云端点中的 firebase 令牌吗 最近提出的问题根本没有澄清 如何将 Firebase 身份验证与 Google 应用引擎端点集成 https stackoverflow com questi
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

    我想使用 Graph API 显示 Facebook 页面的注释项目以及这些评论和点赞 为此 我使用 Facebook SDK 中的 asyncFacebookRunner 步骤是这样的 调用 asyncFacebookRunner req
  • 以编程方式应用样式资源

    我没有找到一种以编程方式做到这一点的方法 所以我在这里发布这个问题 我也没有找到与此相关的任何问题 我有一个资源样式 在 res values styles xml 中定义 我想做的是使用 java 将这种样式应用到我正在操作的 View
  • popupBackground 与 Material Design 相关的问题

    我一直致力于将我的应用程序更新为 Material Design 我有一个使用选项卡的应用程序 由于某种原因 每当我使用 android popupBackground 设置下拉菜单颜色时 它就会崩溃 我设置了一个带有选项卡的默认项目并使用
  • 为什么 ExpandableListView 更改 ChildView 设置(Android)?

    我对使用 ExpandableListView 有疑问 就我而言 我有两个组视图和两个子视图 而子视图由一个带有多个按钮 文本视图等的相对布局组成 例如 当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时 先前所做的更改也会自动应
  • 在上下文操作模式下选择时,ListView 项目不会在视觉上“突出显示”

    我关注了 Android 官方网站创建上下文操作菜单的教程 http developer android com guide topics ui menus html CAB 使用下面的代码 当我长按我的 ListView 项目之一时 它确
  • Android BLE 扫描永远找不到设备

    几天以来 我尝试在我的应用程序中实现 BLE 连接 我知道我尝试连接的设备功能齐全 因此问题一定是我的代码 我用BluetoothLeScanner startScan 方法 但回调方法永远不会被调用 public void startSc

随机推荐

  • 中文垃圾邮件分类。2种特征提取,词袋特征,IFIDF分布特征,贝叶斯NB,LR,SVM各自表现的实战示例代码

    结论 数据 ham data txt spam data txt stop words utf8 数据处理 author liushuchun import re import string import jieba 加载停用词 with
  • 【TensorFlow】远程使用jupyter和TensorBoard

    1 远程jupyter notebook 在服务器端以如下方式启动jupyter jupyter notebook ip 0 0 0 0 结果如下 本地输入上述网址 将括号中的内容替换为服务器IP 即可启动 2 远程TensorBoard
  • Excel Vba范例

    第1部分 单元格选择技巧与选区统计 第1章 单元格与区域选择技巧 实例1选择A列最后一个非空单元格 Sub 选择A列最后一个非空单元格 Range a1048576 End xlUp Select End Sub 讲解 1 Range 返回
  • Promise初步详解(resolve,reject,catch)

    Duang 最近搭建了一个自己的博客小破站 欢迎各位小伙伴来访吖 ares coder blog portalhttps www ares stack cn blog service game 一 何为Promise 为了直观一点 首先我们
  • 利用nginx搭建简单图片服务器实现负载均衡

    在我们搭建一个网站的时候 往往有时候会加载更多的图片 如果都从tomcat服务器来获取静态资源 这样会增加我们服务器的负载 使得服务器运行 速度非常慢 这时我们可以使用nginx服务器来加载这些静态资源 这样就可以实现负载均衡 为我们的To
  • 【高危】企业微信私有化2.5-2.6.93版本后台API未授权访问漏洞

    漏洞描述 企业微信私有化2 5 x版本及2 6 930000版本以下后台中存在接口未授权访问漏洞 攻击者通过访问 cgi bin gateway agentinfo接口可获得Secret 从而利用开放API获取企业通讯录等敏感信息及企业微信
  • 【硬件学习之路】

    硬件学习之路 一个22年毕业的飞行器控制专业转电子的硬件小白 这篇文章将记录我实习以及工作经历 也就是自己的学习笔记啦 硬件本来就是一个需要积累的东西 学海无涯 希望自己能不断丰富自己 而我的工作岗位是助理工程师 主要是学习绘制原理图 板上
  • 机器学习——聚类——商场客户聚类

    聚类的介绍 案例 商场客户聚类 目录 聚类的介绍 案例 商场客户聚类 一 读取数据 二 聚类 KMeans函数的参数讲解 KMeans属性列表 KMeans接口列表 三 查看数据及可视化 sort values 方法 groupby 的常见
  • python torch在dataloader处卡死

    torch在dataloader处卡死 1 解决方案 2 调试历程 2 1 网上搜索了很多方法 尝试无果 故亲自调试 2 2 进入函数 发现一段神奇的代码 1 解决方案 num workers设置为0 一般解决大多数问题 修改读取数据部分代
  • 解析properties文件

    import java io InputStream import java util Properties public class PropertiesUtil public static String getValue String
  • ruby网站部署到服务器,Ruby China 已迁移到新的服务器,基于 Docker 部署

    终于决定要迁移新服务器了 之前那台老机器陪同 Ruby China 运作了 6 年 如果我没记错的话 系统还是 Ubuntu 12 04 昨天下班前还是准备 同步数据库到 UCloud 的 PostgreSQL 服务上 避免以后自己维护和备
  • Elasticsearch(一):入门篇

    文章目录 一 Docker安装ES和Kibana 二 基本概念 文档 index 索引 type 类型 id ID 三 保存或修改文档数据 POST PUT 四 检索文档 GET 1 检索一个文档 2 检索多个文档 mget 五 删除文档
  • 计算机组成原理——万字详解

    引言 作为还在学习的学生和不断进步的同事 学习计算机组成原理具有以下几个重要的好处 它可以帮助你深入理解计算机系统的工作原理 包括处理器 存储器 输入输出设备等组成部分之间的交互关系 这种深入理解可以提高你对计算机系统的整体把握能力 让你能
  • Selenium 自动化测试实战笔记1

    1 安装 selenium pip install selenium 3 11 0 安装指定版本 pip install selenium U 安装最新版本 pip show selenium 查看当前版本 pip uninstall se
  • linux关机等待90秒

    ubuntu关机时 提示 A stop job is running for Session c2 of user 1min 30s 解决方法 sudo gedit etc systemd system conf 去除默认的注释 修改为 D
  • Lua : 回调函数不用怕,用法简单仿C/C++

    Lua也可以做回调函数 那当然 不明觉厉 嘿嘿嘿 那是不是可以在Lua编程时候搞点飞机啦 加 function add x y return x y end 减法 function minux x y return x y end func
  • 使用Iframe+Post请求的方式嵌入第三方页面

    背景描述 本身我们有自己的一个系统 之后采购了一个新系统 新系统的页面要嵌入到我们自己系统页面来 两个系统之间的权限交互通过token来进行传递和认证 本身嵌入采用如下方式就非常简单了 就是常规的iframe嵌入页面的方式 常规的ifram
  • Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤

    1 从https github com opencv opencv releases 下载opencv 3 4 2 zip并解压缩到D soft OpenCV3 4 2 opencv 3 4 2目录下 2 从https github com
  • ps2021神经网络AI滤镜下载,ps神经网络滤镜安装包

    如何解决ps2021 新版 AI神经滤镜不能用 网上买正版 更新下就好了 盗版的都会有各种这样的问题 ps2021神经AI滤镜是需简要上传云端 由Adobe官方服务器人工智能运算的 Ps2021版本新增了Ai神经元滤镜 它不是与软件一起安装
  • 如何实现Android app开机自启动

    这里写目录标题 前言 代码实现 AndroidManifest xml BootReceiver java MainActivity java MyService java 问题解决 前言 上一篇文章如何实现无界面Android app介绍