不进行多说内容了,自行测试
1. AndroidManifest.xml
//manifest
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//application 部分可能没有用到
<receiver android:name=".AppStartReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter tools:ignore="ExtraText">
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.STARTMYAP"/>
</intent-filter>
</receiver>
创建类 AppStartReceiver
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
public class AppStartReceiver extends BroadcastReceiver {
private static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//取得AppStartReceiver所在的App的包名
String localPkgName = context.getPackageName();
Uri data = intent.getData();
//取得安装的Apk的包名,只在该app覆盖安装后自启动 getSchemeSpecificPart
String installedPkgName = data.getEncodedSchemeSpecificPart();
if ((action.equals(Intent.ACTION_PACKAGE_ADDED)
|| action.equals(Intent.ACTION_PACKAGE_REPLACED)) && installedPkgName.equals(localPkgName)) {
//app启动的Activity
Intent launchIntent = new Intent(context, MainActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchIntent);
}
//开机启动
if (ACTION.equals(intent.getAction())) {
Intent mainIntent = new Intent(context, MainActivity.class);//MainActivity.calss为你要打开的界面,如果没有界面就可以用service代替
// 在BroadcastReceiver中显示Activity,必须要设置FLAG_ACTIVITY_NEW_TASK标志
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainIntent);
}
//启动APP
if (intent.getAction().equals(ACTION)) {
Intent intent1 = new Intent(context, MainActivity.class); // 要启动的Activity
if (!(context instanceof Activity)) {
//如果不是在Activity中显示Activity,必须要设置FLAG_ACTIVITY_NEW_TASK标志
intent1 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent1 );
}
}
}