当前位置: 首页 > news >正文

Android 让程序随系统自动启动并允许后台运行(白名单)

最近制作一个管理程序,需要在开机时候启动,并持续运行。这里简单记录下如何制作。

自启动原理

系统在启动的时候会广播一个ACTION_BOOT_COMPLETED,带有接收的程序可以收到,所以我们在接收到以后把程序运行起来。

清单文件设置

所以我们首先在清单文件AndroidManifest.xml的application节点中添加(receiver ),和RECEIVE_BOOT_COMPLETED权限。

如下内容:


<application 。。。。。。。。.<!-- 接收来自系统启动的消息 --><receiver android:name=".BootBroadcastReceiver"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver>
</application>
<!-- 需要接收系统启动通知的权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

接收程序

清单文件中的BootBroadcastReceiver就是接收,我们再创建一个Java类,如下:


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class BootBroadcastReceiver extends BroadcastReceiver {static final String ACTION = "android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent){Log.i("test - 广播启动","启动了,开启游戏管理器.");if (intent.getAction().equals(ACTION)){String apk_name = context.getPackageName();Intent it = context.getPackageManager().getLaunchIntentForPackage(apk_name);if (it != null) {it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(it);}}}}

这样启动部分就做好了。

白名单

白名单就是把自己加入到系统白名单,不会在电池管理里去关闭掉进程。

清单文件

需要添加一个REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限。

<!-- 白名单 --><uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

脚本

脚本中我们在onCreate函数中添加:
首先判断是否已经在白名单了,如果不在我们进行添加,这样在打开应用的时候会提示是否允许添加到白名单。

	Log.i("test","是否白名单"+isIgnoringBatteryOptimizations())if(!isIgnoringBatteryOptimizations()){requestIgnoreBatteryOptimizations()}

函数:

//查询白名单@RequiresApi(api = Build.VERSION_CODES.M)private fun isIgnoringBatteryOptimizations(): Boolean {var isIgnoring = falseval powerManager = getSystemService(POWER_SERVICE) as PowerManagerif (powerManager != null) {isIgnoring = powerManager.isIgnoringBatteryOptimizations(packageName)}return isIgnoring}//添加到白名单@RequiresApi(api = Build.VERSION_CODES.M)fun requestIgnoreBatteryOptimizations() {try {val intent: Intent = Intent(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)intent.setData(Uri.parse("package:$packageName"))startActivity(intent)} catch (e: java.lang.Exception) {e.printStackTrace()}}

第一次运行可以看到这个允许的界面
在这里插入图片描述

我的主界面是kotilin的,发觉还是Java语法顺手,就这样吧。

测试

最后我们编译运行后再设备重启,我们可以看到Log并看到我们的程序主界面被拉起了。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • arch linux 安装Budgie桌面
  • MySQL约束
  • 一、软件工程概述
  • 网络协议十 应用层 SPDY / HTTP2 / QUIC / HTTP3
  • 使用mybatis注解和xml映射执行javaWeb中增删改查等操作
  • Day18 Linux系统编程学习--文件
  • Java 中的面向对象编程 (OOP) 概念
  • 解析Java中1000个常用类:ListResourceBundle类,你学会了吗?
  • Linux安全与高级应用(十三)深入解析Linux中的rsync远程同步:原理、配置与应用
  • Layui——隐藏表单项后不再进行验证
  • 低代码开发平台:技术概览、效率与质量的权衡及挑战与机遇
  • Vue3配置路由
  • vue-lic
  • 【微信小程序】页面配置
  • docker的安装和常用命令
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS编译提示和导航提示
  • Java IO学习笔记一
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JS 面试题总结
  • leetcode388. Longest Absolute File Path
  • Promise面试题2实现异步串行执行
  • python 装饰器(一)
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Spring Cloud中负载均衡器概览
  • 创建一种深思熟虑的文化
  • 对象管理器(defineProperty)学习笔记
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 码农张的Bug人生 - 初来乍到
  • 前端学习笔记之观察者模式
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一个完整Java Web项目背后的密码
  • 赢得Docker挑战最佳实践
  • scrapy中间件源码分析及常用中间件大全
  • 阿里云移动端播放器高级功能介绍
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​Python 3 新特性:类型注解
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ​香农与信息论三大定律
  • #pragma pack(1)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $jQuery 重写Alert样式方法
  • (C)一些题4
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (八十八)VFL语言初步 - 实现布局
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)http协议