小米手机程序开机自启动

实现机制

使用广播对开机事件进行监听,监听到开机广播后启动程序界面。需要实现拦截广播android.permission.RECEIVE_BOOT_COMPLETED,并且需要使用静态注册广播的方法(即在AndroidManifest.xml文件中定义广播)

申请权限

在AndroidManifest.xml中添加监听权限和后台弹出的权限。

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

创建监听广播

public class BootBroadcastReceiver extends BroadcastReceiver {
    static final String ACTION = "android.intent.action.BOOT_COMPLETED";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION)) {
            Intent i=new Intent(context,MainActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}

启动Activity时,一定要添加 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);或 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这是因为Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的任务栈,在新的任务栈中启动新的程序。

静态注册广播

广播有动态注册和静态注册两种,这里需要使用静态注册(在AndroidManifest.xml中注册),这是因为静态注册会再系统开机时自动扫描进行广播注册,无法手动控制,开机一直运行中,而动态注册是通过registerReceiver注册的BroadcastReceiver在对其进行注册的Context对象"销毁"了或者调用了unregisterReceiver方法时也就失效了。

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

小米手机权限申请

小米手机在android10.0之后屏蔽了开机自启动和后台弹出界面的权限(安全机制)需要在安装好程序之后在手机的程序应用信息中申请权限
在这里插入图片描述

完成

程序要启动一次之后,开机重启之后便会自动打开程序主页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值