Android 屏幕唤醒 + 屏幕解锁 + 开机广播android.intent.action.BOOT_COMPLETED

本文介绍如何在Android设备上实现应用开机自启动,并通过发送特定广播唤醒并解锁屏幕。同时,文章还提供了如何在清单文件中正确配置广播接收器及所需权限的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 屏幕唤醒 + 屏幕解锁 + 开机广播android.intent.action.BOOT_COMPLETED

1.内容说明

		Android手机开机后,会发送android.intent.action.BOOT_COMPLETED广播  流程:广播接收器 (屏幕唤醒 + 屏幕解锁 + 接收开机广播)
		代码如下:

2.代码

/**
 * @Author: Su
 * @Date: 2022/11/30
 * @Description:广播接收器
 */
public class BootupReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Log.e("BootupReceiver---",intent.getAction());
        Toast.makeText(context,intent.getAction(),Toast.LENGTH_SHORT).show();
        //屏幕唤醒
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "BootBroadcastReceiver");
        wl.acquire();

        //屏幕解锁
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        KeyguardManager.KeyguardLock kl = km.newKeyguardLock("BootBroadcastReceiver");
        kl.disableKeyguard();

        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {

            // context, AutoRun.class
            Intent newIntent = new Intent(context, MainActivity.class);

            /* MyActivity action defined in AndroidManifest.xml */
            newIntent.setAction("android.intent.action.MAIN");

            /*
             * If activity is not launched in Activity environment, this flag is
             * mandatory to set
             */
            newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            /* if you want to start a service, follow below method */
            context.startActivity(newIntent);

        }


    }
}
/**
 * @Author: Su
 * @Date: 2022/11/30
 * @Description:清单文件配置广播接收器
 */
<receiver
            android:name=".receiver.BootupReceiver"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.DEFAULT"/>

            </intent-filter>
        </receiver>
/**
 * @Author: Su
 * @Date: 2022/11/30
 * @Description:添加权限
 */
    <!--    开机监听-->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
     <!--    唤起APP-->
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
       <!--    悬浮窗权限-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

3.常见问题

Android API Level8以上的时候,程序可以安装在SD卡上。如果程序安装在SD卡上,那么在BOOT_COMPLETED广播发送之后,SD卡才会挂载,因此程序无法监听到该广播。

4.解决方案

清单文件 目录下添加:
android:installLocation=“internalOnly”

5.android:installLocation说明

android:installLocation的属性有"auto"、“internalOnly”、“preferExternal

auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户可以决定把程序放在外部储介质还是内存中.
internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.

意见反馈

如果各位大佬有什么意见可以提出来,进行修改,欢迎各位大佬提出问题!!!

### Android 设备启动完成后发送广播 为了确保应用程序能够在 Android 系统启动完成之后接收到特定的广播消息,通常需要监听 `BOOT_COMPLETED` 广播事件。此广播会在设备完成启动过程并解锁后发出。 #### 注册 Boot Completed 接收器 要接收此类广播,需创建一个继承自 `BroadcastReceiver` 的类,并重写其 `onReceive()` 方法: ```java public class StartupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { // 执行必要的初始化操作或启动其他组件 Log.d("StartupReceiver", "Boot completed detected"); // 可在此处发送新的广播或其他逻辑处理 sendCustomBroadcast(context); } } private void sendCustomBroadcast(Context context){ Intent customIntent = new Intent("com.example.CUSTOM_BROADCAST_ACTION"); customIntent.putExtra("type","startup"); context.sendBroadcast(customIntent); } } ``` #### 配置清单文件 还需在应用的 `AndroidManifest.xml` 文件中声明该接收器以及所需的权限: ```xml <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application ...> ... <receiver android:name=".StartupReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> ``` 当设备启动完毕并且屏幕解锁时,系统会向所有匹配的应用程序分发 `BOOT_COMPLETED` 消息[^1]。 应用可以利用这一时机来进行一些后台任务调度或是激活某些长期运行的服务。 对于 API Level 26及以上版本(即 Android Oreo),需要注意即使设置了上述配置,默认情况下应用仍然不会立即接收到这条广播除非它已经被用户主动打开过至少一次[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android程序Su

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值