如何在 Android 锁屏状态下启动并显示 Activity(如来电界面)

小伟小哥_5281

小伟小哥_5281

2026-08-22

981人浏览

原创

如何在 Android 锁屏状态下启动并显示 Activity(如来电界面)

本文详解如何通过配置 AndroidManifest.xml、使用 PowerManager.WakeLock 唤醒屏幕,并结合 Window 标志与 KeyguardManager,实现在锁屏状态下无缝展示自定义 Activity(如 Firebase 推送触发的来电界面)。

本文详解如何通过配置 `androidmanifest.xml`、使用 `powermanager.wakelock` 唤醒屏幕,并结合 `window` 标志与 `keyguardmanager`,实现在锁屏状态下无缝展示自定义 activity(如 firebase 推送触发的来电界面)。

在 Android 开发中,当应用需在设备锁屏时立即响应高优先级事件(例如 VoIP 来电、紧急通知),仅靠普通 Intent 启动 Activity 是不够的——系统默认会阻止前台界面覆盖锁屏。要实现“锁屏即显”的效果,需协同完成三方面配置:清单声明、唤醒控制、窗口权限适配。

✅ 1. 清单文件配置(必备)

在 AndroidManifest.xml 中为目标 Activity(如 IncomingCall)添加关键属性:

<activity android:name=".IncomingCall" android:exported="false" android:launchmode="singleInstance" android:showonlockscreen="true">
    android:screenOrientation="sensorPortrait" /></activity>

⚠️ 注意:android:showOnLockScreen="true" 是 Android 5.0+ 的推荐方式,替代已废弃的 FLAG_SHOW_WHEN_LOCKED,但需配合代码层逻辑才能可靠生效。

✅ 2. 唤醒设备并启动 Activity

在接收 Firebase 消息(如 onMessageReceived())或后台服务中,执行以下操作:

android-agent
android-agent

通过USB或网络使用GPT‑4o视觉控制真实Android手机,执行打开应用、输入、点击和自动化脚本等任务。

下载
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
        PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
        "myalarmapp:alarm"
);
wl.acquire(5000); // 保持唤醒 5 秒,确保 Activity 完全启动

Intent intent = new Intent(this, IncomingCall.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

wl.release(); // 及时释放 WakeLock,避免耗电

? ACQUIRE_CAUSES_WAKEUP 是关键:它不仅维持 CPU 运行,还会点亮屏幕并解锁锁屏(需用户已设置“允许在锁屏显示通知”)。

✅ 3. 目标 Activity 内部适配锁屏状态

在 IncomingCall.java 的 onCreate() 中,根据 SDK 版本选择兼容方案:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setShowWhenLocked(true);           // 允许在锁屏显示
        setTurnScreenOn(true);             // 自动点亮屏幕
        KeyguardManager km = getSystemService(KeyguardManager.class);
        if (km != null && km.isKeyguardLocked()) {
            km.requestDismissKeyguard(this, null); // 解锁锁屏(需声明 USE_KEYGUARD 权限)
        }
    } else {
        Window window = getWindow();
        window.addFlags(
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
        );
    }

    setContentView(R.layout.activity_incoming_call);
}

? 权限补充说明:
需在 AndroidManifest.xml 中声明:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission><uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission><uses-permission android:name="android.permission.POST_NOTIFICATIONS"></uses-permission><!-- Android 13+ -->

⚠️ 注意事项与最佳实践

  • 电池优化豁免:部分厂商(华为、小米等)会限制后台唤醒,需引导用户手动关闭电池优化。
  • 通知渠道优先级:Firebase 高优先级通知(priority=high, notification_priority=max)更易触发前台行为。
  • Android 12+ 限制:自 Android 12 起,FLAG_SHOW_WHEN_LOCKED 和 setShowWhenLocked() 在部分场景下被进一步限制,建议搭配 NotificationCompat.Builder 的 setFullScreenIntent() 使用(需用户授予“全屏通知”权限)。
  • 用户体验:务必提供明确的挂断/接听控件,并支持音量键、电源键响应,避免用户误触无法退出。

通过以上三步整合,即可稳定实现锁屏状态下的 Activity 弹出,适用于实时通信、安防告警等强交互场景。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

android

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

902

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2647

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

5057

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

645

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

944

5

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

0

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.3万人学习

Java 教程
Java 教程

共578课时 | 191.6万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.6万人学习