开机自动启动activity
运行平台:
手机:红米9A
安卓版本:11
开发平台:
开发工具:android studio 2022.3.1 Patch 1
sdk配置,build.gradle文件中
compileSdk 34
minSdk 29
targetSdk 33
基本原理:
监听开机完成广播:android.intent.action.BOOT_COMPLETED
在监听广播响应函数接口里,启动本程序activity
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.ProcessWatch"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"android:label="@string/title_activity_main"android:theme="@style/Theme.ProcessWatch"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiverandroid:name="com.example.processwatch.LaunchReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver></application></manifest>
广播处理:
package com.example.processwatch;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;public class LaunchReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.i("123456", "LaunchReceiver..........");Toast.makeText(context, "Launch complete", Toast.LENGTH_LONG).show();Intent launchIntent = new Intent(context, MainActivity.class);launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(launchIntent);}
}
权限说明:
在AndroidManifest.xml文件中
广播权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
窗口相关权限(没有这个广播函数启动不了activity):
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
最好在应用信息手动操作,打开应用程序如下权限:
自启动,后台弹出界面,显示浮窗
我也不确定是否真的有影响,之前是有广播但启动不了activity
启动任务栈:
在广播处理中,启动的代码
Intent launchIntent = new Intent(context, MainActivity.class);launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchIntent);
注意不要少了这一行
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
