Android 程序随开机自动运行

article/2025/9/8 10:39:30

目录

本文导读

应用开机自启

常用系统事件


本文导读

因为业务需要,项目中需要实现 APP 跟随系统开机后自动运行,环境是:minSdkVersion 17、targetSdkVersion 28、Android Studio 3.1.2,本人手机 系统为 Android 5.1.1。

网络上有太多的文章介绍 Android 应用如何根据系统开机自动运行,但是实际操作起来会发现并没有说的那么简单。

所以本文先将所有的注意事项介绍在前,然后再讲具体的实现。

1)注意事项 1:在全局配置文件:AndroidManifest.xml 中

1.1)android:installLocation="internalOnly":表示程序只能被安装在内存中,如果内存为空,则程序将不能成功安装,因为安装在 SD 卡中时会接收不到系统的广播消息(暂时未验证)

1.2)<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />:添加允许程序随系统开机而自动运行的权限

1.3)<!--注册接收系统开机广播消息的广播接收者-->
<receiverandroid:name=".broadcastReceiver.MyBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.HOME" /></intent-filter>
</receiver>

2)注意事项 2 :就是手机上的设置问题。为了防止恶意软件随意的开机自启,拖慢系统的开机速度,损害用户体验,通常手机上类似 “手机管家” 等软件默认是不允许它们开机自启的,这也是本人反反复复测试失败的原因。

因为 Android 系统是开源的,所以各大手机厂商可能略有不同,以本人的 Nubia(努比亚) 手机为例,它默认出厂自带一个 "手机管家" 软件,如下所示,必须将自己需要开机自启的应用设置为通过,否则测试一个下午也不见成功。

3)注意事项 3:开机自启的 APP 安装后启动系统时,第一次要手动开启 APP,后面再次开机时,APP 就能正常自启了。

应用开机自启

1、原理就不多说了,网上很多文章都已经说过了,核心就是因为 Android 系统在很多时刻都会给所有的应用广播消息,比如 系统开机、电量低,网络状态变化等,只需自己静态注册广播接收者,然后接收系统发出的广播消息然后处理即可。

2、代码其实非常简单,就是这些细节问题导致容易导致失败,效果如下,系统开机后,启动 APP,现在开始上代码。

布局文件 activity_main.xml 文件内容如下,就是 helloWorld 默认生成的内容,

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>

自定义广播接收者 继承 android.content.BroadcastReceiver:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
import com.lct.www.yuan.MainActivity;
/*** 自定义 广播接收者* 继承 android.content.BroadcastReceiver*/
public class MyBroadcastReceiver extends BroadcastReceiver {private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";/*** 接收广播消息后都会进入 onReceive 方法,然后要做的就是对相应的消息做出相应的处理** @param context 表示广播接收器所运行的上下文* @param intent  表示广播接收器收到的Intent*/@Overridepublic void onReceive(Context context, Intent intent) {Log.i("Wmx logs::", intent.getAction());Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show();/*** 如果 系统 启动的消息,则启动 APP 主页活动*/if (ACTION_BOOT.equals(intent.getAction())) {Intent intentMainActivity = new Intent(context, MainActivity.class);intentMainActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intentMainActivity);Toast.makeText(context, "开机完毕~", Toast.LENGTH_LONG).show();}}
}

主活动 MainActivity.java 内容如下:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.i("Wmx logs::", "活动创建...");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 当活动被销毁时*/@Overrideprotected void onDestroy() {Log.i("Wmx logs::", "活动销毁...");super.onDestroy();/**注销 unregisterReceiver(),否则可能引起内存泄露。*/}
}

全局配置文件 AndroidManifest.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.lct.www.yuan"android:installLocation="internalOnly"><!--添加允许程序开机自动运行权限--><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid: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"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--注册接收系统开机广播消息的广播接收者--><receiverandroid:name=".broadcastReceiver.MyBroadcastReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.HOME" /></intent-filter></receiver></application>
</manifest>

本文环境:minSdkVersion 17、targetSdkVersion 28、Android Studio 3.1.2,本人手机 系统为 Android 5.1.1,代码完全亲测有效。

开机自启的 APP 安装后启动系统时,第一次要手动开启 APP,后面再次开机时,APP 就能正常自启了。

常用系统事件

有许多系统产生的事件被定义为类 Intent 中的静态常量值。下面的表格列举了重要的系统事件。

事件常量描述
android.intent.action.BATTERY_CHANGED持久的广播,包含电池的充电状态,级别和其他信息。
android.intent.action.BATTERY_LOW标识设备的低电量条件。
android.intent.action.BATTERY_OKAY标识电池在电量低之后,现在已经好了。
android.intent.action.BOOT_COMPLETED在系统完成启动后广播一次。
android.intent.action.BUG_REPORT显示报告bug的活动。
android.intent.action.CALL执行呼叫数据指定的某人。
android.intent.action.CALL_BUTTON用户点击"呼叫"按钮打开拨号器或者其他拨号的合适界面。
android.intent.action.DATE_CHANGED日期发生改变。
android.intent.action.REBOOT设备重启。

http://chatgpt.dhexx.cn/article/juIag4Mw.shtml

相关文章

linux开机自动执行脚本、运行程序

文章目录 用途、大致步骤一、创建脚本1、autoStart.sh 放到/etc/rc.d/init.d文件夹中、权限赋值777或者755都行2、other.sh可以放在系统中的任何位置、权限777或者755 二、把autoStart.sh注册到开机启动里面1、autoStart.sh脚本放到/etc/rc.d/init.d文件夹中后执行命令;注意:先…

Jetson nano开机自启动程序

目录 前言1.介绍2.创建开机自启动程序2.1 创建一个bash文件2.2 创建一个service文件2.3 添加权限2.4 移动service文件2.5 启动服务2.6 停止/重启服务2.7 取消开机自启动服务 结语参考 前言 最近有个需求&#xff0c;需要在jetson nano开机自启动一个应用程序&#xff0c;最近看…

树莓派开机自动运行python程序的方法

方法一 添加程序到rc.local 里 添加到rc.local 里的py脚本文件将会在树莓派开机是自动运行&#xff0c;这种方式适合没有显示器&#xff0c;具体操作如下: 编辑文件 rc.localsudo nano /etc/rc.local添加命令来执行python程序&#xff0c;要使用文件的绝对路径。确保在exit 0…

linux_systemd启动方式解析,如何开机自动登录,开机自动运行程序

楼主使用的是天嵌的IMX6Q。 最新的官方yocto,4.9_123编译出来的文件系统。 其启动方式是系统服务的方式&#xff0c;记录一下&#xff1a; 如何修改串口控制台自动登录&#xff0c;和开机自动运行程序 Linux系统的启动方式有点复杂&#xff0c;而且总是有需要优化的地方。传…

批处理+开机自动执行

一、 写批处理脚本请参考&#xff1a;批处理 二、 只需要将上面写的xxx.bat文件放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp路径下&#xff0c;开机就会自动执行&#xff0c;执行你想要的开机设置或者打开一些软件

定时开机-开机自动运行程序-定时关机(windows 下)

前言 电脑长时间未关机第二天来就会完全卡死。将有规律、重复性动作自动化。 目录 一、设置定时开机 二、设置开机启动自定义应用 三、设置定时关机 一、设置定时开机 定时开机这个&#xff0c;可能需要看“硬件”,我能成功主要是因为我的BIOS上有定时开机这个选项&#xff…

Beaglebone Black——开机自动运行程序

上接《修改设备树文件》一文 现在每次开机都能看到/dev/rtc1了&#xff0c;那么我们还需要一个应用程序来把时间从RTC读取出来更新到系统中&#xff0c;然而通过linux系统自带的一个程序hwclock&#xff0c;我们就可以把RTC的时间更新到系统中来&#xff0c;不需要自己动手省了…

树莓派开机自动运行python程序的两种方式

本文以一个简单的python程序为例&#xff0c;介绍树莓派开机程序自启动的两种方式&#xff0c;以及其中可能遇到的问题。python程序myled.py如下&#xff0c;保存路径为/home/pi/myled.py。 import RPi.GPIO as GPIO import timeGPIO.setmode(GPIO.BOARD) GPIO.setup(35, GPIO…

最小Linux系统中如何实现开机自动运行程序(进程)

一、目标 将交叉编译生成的可执行文件&#xff0c;放到最小Linux系统中&#xff0c;然后实现板子开机后&#xff0c;最小Linux系统运行起来后&#xff0c;自动执行可执行文件&#xff0c;并将可执行文件进程挂到后台运行。 二、实现 1、生成目标可执行文件 例&#xff1a; …

计算机启动windows程序,win7系统开机自动运行程序怎么设置|win7电脑开机启动程序的方法...

一些程序在一开机的时候就会自动打开&#xff0c;这样就不需要自己去打开了。那么win7开机自动运行程序怎么设置&#xff1f;下面就跟大家说说具体的设置步骤。 win7电脑开机启动程序的方法&#xff1a; 一、软件自带法&#xff1a; 大多数软件都提供开机自启动的功能&#xff…

Ubuntu添加开机自动运行程序

ubuntu下有很多中开机自动运行程序的方法,在开机的不同过程中可以启动不同的程序.如在开机启动时自动运行程序&#xff0c;是通过修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件&#xff0c;可以使init自动启动其它程序。例如&#xff…

树莓派Pico 开机自动运行程序

用Thonny编写的程序通过MicroPython运行后再重新上电程序不运行&#xff0c;需再次在Thonny内点击运行按钮才行。 以下步骤开机可自动运行&#xff1a; 程序必须保存在树莓派内部空间&#xff08;另存时如串口正常会出现保存本机还是pico的选项,如图&#xff09;。注意&#…

嵌入式Linux设置开机自动运行程序(基于BusyBox init)

文章目录 目的BusyBox init启动流程inittabrcS 和 rcK 设置开机自动运行程序总结 目的 开机自动运行程序&#xff0c;或者说系统启动时自动运行程序&#xff0c;这是经常会需要用到的功能。这个功能通常依托于 init 程序实现。 init 是Linux在内核启动完成之后第一个启动的程序…

Linux笔记:开机自动运行程序

文章目录 目的rc.localSysVinitSystemd在Systemd中实现rc.local注意事项SysVinit和Systemd的联系与区别总结 目的 开机自动运行程序&#xff0c;或者说系统启动时自动运行程序&#xff0c;这是经常会需要用到的功能。在linux中实现随系统启动运行程序的功能通常有三种&#xf…

Big-Endian Little-Endian

大端模式Big-Endian就是高位字节排放在内存的低地址端&#xff0c;低位字节排放在内存的高地址端。 小端模式Little-Endian就是低位字节排放在内存的低地址端&#xff0c;高位字节排放在内存的高地址端。 小端模式 &#xff1a;强制转换数据不需要调整字节内容。 大端模式 &a…

字节序:Big Endian 和 Little Endian

最近碰到了node.js中的buf.readUInt16LE(offset[, noAssert])方法&#xff1a; 根据指定的偏移量&#xff0c;使用特殊的 endian 字节序格式读取一个无符号 16 位整数。若参数 noAssert 为 true 将不会验证 offset 偏移量参数。 这意味着 offset 可能会超出 buffer 的末…

字节序——Big Endian和Little Endian

Big Endian和Little Endian 一、Endian 的起源二、字节序之 Little-Endian&Big-Endian三、为什么要注意字节序四、网络序和主机序五、Go 中的字节序 一、Endian 的起源 在各种计算机体系结构中&#xff0c;对于字节、字等的存储机制有所不同&#xff0c;因而引发了计算机通…

小端格式和大端格式(Little-EndianBig-Endian)

小端格式和大端格式(Little-Endian&Big-Endian) 1 字节序 字节序&#xff0c;也就是字节的顺序&#xff0c;指的是多字节的数据在内存中的存放顺序。 在几乎所有的机器上&#xff0c;多字节对象都被存储为连续的字节序列。 例如&#xff1a;如果C/C中的一个int型变量 a…

BIG-ENDIAN VS LITTLE-ENDIAN

1. 计算机硬件有两种储存数据的方式&#xff1a;大端字节序&#xff08;big endian&#xff09;和小端字节序&#xff08;little endian&#xff09;。 举例来说&#xff0c;数值0x2211使用两个字节储存&#xff1a;高位字节是0x22&#xff0c;低位字节是0x11。 字节序&…

什么是字节序? Big-Endian vs Little-Endian 举例说明

计算机只理解二进制。这意味着 0 和 1 构成了计算机使用的语言。 一位是 0 或 1 。8 位组成一个字节。从这些简单的部分&#xff0c;我们可以构建极其复杂的连接计算机系统来渲染视频、显示来自世界各地的文本并计算极其复杂的算法。 一些数据&#xff08;一些英文字符&#…