前言:
帮朋友做一下开机监听,并自启app。顺便记录一下。
注意:开机后会停留在锁屏页面,且短时间内如果没有进行解锁操作,屏幕会进入休眠状态,所以启动APP时需要先唤醒屏幕和解锁屏幕
流程:
一:在AndroidMainfest.xml中,将启动页的Activity设置一下即可(intent-filter)
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<category android:name="android.intent.category.HOME" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
二:AndroidManifest文件中声明receiver:
<receiver
android:name=".BroadCastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
接下来是权限(一会要用到悬浮窗权限)
<!--接收启动完成的广播权限-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--悬浮窗-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
然后再在定义的BroadCastReceiver中实现BroadcastReceiver
/**
* 开机自启动
*/
public class BroadcastReceiver extends BroadcastReceiver {
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
//开机启动
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent thisIntent = new Intent(context, StartPageActivity.class);//设置要启动的app
thisIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(thisIntent);
}
}
}
三:在主Activity里申请悬浮窗权限(任何一种声明权限的方式都可,我用的RxPermissions )
android6.0不用理会,会自动开
RxPermissions rxPermissions=new RxPermissions(this);
rxPermissions.request(Manifest.permission.SYSTEM_ALERT_WINDOW).subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean){
//申请的权限全部允许
Toast.makeText(MainActivity.this, "允许了权限!", Toast.LENGTH_SHORT).show();
initData();
}else{
//只要有一个权限被拒绝,就会执行
Toast.makeText(MainActivity.this, "未授权权限,部分功能不能使用", Toast.LENGTH_SHORT).show();
}
}
});
补充:
悬浮必须要申请,不申请无法自启
我的测试机是华为的,需要打开自启动,小米的貌似要打开其他东西,ov好像不用,只需要下图就可以。