Android开机程序自启动

采用广播监听的方法,当监听到手机启动的时候,让APP启动,从而实现了开机自启动

权限设置

由于系统在启动完成后,会发出一个BOOT_COMPLETED广播,所以我们需要去接受这个广播。

需要添加这个权限

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

添加广播

新建AutoStartBroadcastReceiver.java类继承BroadcastReceiver,记住alt+Enter添加onReceive方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoStartBroadcastReceiver extends BroadcastReceiver {
static final String action_boot ="android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(action_boot)){

Intent sayHelloIntent=new Intent(context,MainActivity.class);

sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(sayHelloIntent);
}
}
}

如果接受到了android.intent.action.BOOT_COMPLETED广播,就讲页面传递到目标页面MainActivity.class

因为我们是在如果一个外部的Activity Context调用startActivity方法,那么,Intent对象必须包含 FLAG_ACTIVITY_NEW_TASK标志,这是因为,待创建的Activity并没有从一个已经存在的Activity启动(任务栈中并没有此Activity),它并没有已经存在的任务,因此它需要被放置在自己独立的任务中(也就是在任务栈中新建一个任务)。

注册广播

AndroidManifest.xml中添加

1
2
3
4
5
6
7
<receiver android:name=".AutoStartBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME"/>
</intent-filter>
</receiver>

android.intent.action.MAIN决定应用程序最先启动的Activity

android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

android.intent.category.HOME是Android的桌面功能

所以我们接收到了广播,并且把它当做桌面启动,那么,他就成为了一个自启动的应用。