天天看点

android 开机启动APP

不进行多说内容了,自行测试

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 );
        }
    }
}