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

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

自启动原理

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

清单文件设置

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

如下内容:

java 复制代码
<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类,如下:

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";

    @Override
    public 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权限。

java 复制代码
<!-- 白名单 -->
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

脚本

脚本中我们在onCreate函数中添加:

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

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

函数:

kotlin 复制代码
//查询白名单
    @RequiresApi(api = Build.VERSION_CODES.M)
    private fun isIgnoringBatteryOptimizations(): Boolean {
        var isIgnoring = false
        val powerManager = getSystemService(POWER_SERVICE) as PowerManager
        if (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并看到我们的程序主界面被拉起了。

相关推荐
铁匠匠匠1 分钟前
【C总集篇】第八章 数组和指针
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
编程小白煎堆5 分钟前
C语言:枚举类型
java·开发语言
秋邱10 分钟前
C++: 类和对象(上)
开发语言·c++
好多吃的啊14 分钟前
背景图鼠标放上去切换图片过渡效果
开发语言·javascript·ecmascript
神奇夜光杯19 分钟前
Python酷库之旅-第三方库Pandas(123)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
zhangbin_23725 分钟前
【Python机器学习】NLP信息提取——提取人物/事物关系
开发语言·人工智能·python·机器学习·自然语言处理
GoFly开发者28 分钟前
GoFly快速开发框架/Go语言封装的图像相似性比较插件使用说明
开发语言·后端·golang
_.Switch36 分钟前
构建现代应用的Python Serverless架构详解
运维·开发语言·python·云原生·架构·serverless·restful
苹果酱056736 分钟前
通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制
java·开发语言·spring boot·后端·中间件
Sunny_yiyi39 分钟前
Gateway--服务网关
java·开发语言·gateway