小米手机程序开机自启动
- 实现机制
- 申请权限
- 创建监听广播
- 静态注册广播
- 小米手机权限申请
- 完成
实现机制
使用广播对开机事件进行监听,监听到开机广播后启动程序界面。需要实现拦截广播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";@Overridepublic 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之后屏蔽了开机自启动和后台弹出界面的权限(安全机制)需要在安装好程序之后在手机的程序应用信息中申请权限
完成
程序要启动一次之后,开机重启之后便会自动打开程序主页面