这个功能实现起来应该有多种方式,可以使用WindowManager创建window的方法。
在本文中我们使用开启一个Activity来充当锁屏界面。
实现步骤有以下两步:
一、后台开启一个Service,监听屏幕锁屏广播。
二、当屏幕熄灭,收到广播后,开启充当锁屏界面的Activity。
实现思路就是这么简单,但具体细节需要说说。

首先开启Service。

Intent service = new Intent(this, LockService.class);startService(service);

在Service监听屏幕锁屏广播。

public void onCreate() {receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction() == Intent.ACTION_SCREEN_OFF) {System.out.println("收到锁屏广播");Intent lockscreen = new Intent(LockService.this, LockScreenActivity.class);lockscreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(lockscreen);}}};IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_SCREEN_OFF);registerReceiver(receiver, filter);}

Intent.ACTION_SCREEN_OFF表示屏幕熄灭。
在广播onReceive()方法中,收到屏幕熄灭的广播后,开启充当锁屏界面的Activity,我们知道在Service中启动Activity需要添加一个标志位。
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这样我们便实现了锁屏功能。

问题还没有结束。
首先开启的Activity我们最好把它设置在单独的一个任务栈中,它与当前APP的任务栈没有关系,相互独立,这样才是一个好的锁屏功能。既然是锁屏,那么这个任务栈有且只有这一个Activity。
我们很容易想到singleInstance属性了。

      android:launchMode="singleInstance"android:taskAffinity="com.example.suoping.lockscreen"

其次,这个Activity在最近打开的Activity中不能出现,也就是按住home键出现最近打开的Activity界面中不能有它。因为它是锁屏功能嘛,解锁之后肯定就不能再看到它。

android:excludeFromRecents="true"

最后,在Activity设置Window的Flags,一定要在setContentView之前设置。

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

假如我们的手机有锁屏功能,就是系统的那种锁屏,滑动图案解锁之类的,那么我们无法越过这个界面,只能在这个界面之上加入我们的Activity,加入这两个flag保证了Activity会出现在锁屏界面。

至此我们的锁屏后插屏功能已经实现。
要完全仿的话,它首先需要滑动finish功能,且不响应back键。
不响应back键容易,覆写onBackPressed()方法什么也不做。

 @Overridepublic void onBackPressed() {}

滑动finish功能我们这里用到开源项目SwipeBackLayout,将Activity主题设置为透明,继承SwipeBackActivity即可。

 <style name="LockScreenBase" parent="android:Theme.Light.NoTitleBar.Fullscreen"><item name="android:windowIsTranslucent">true</item><item name="android:windowBackground">@android:color/transparent</item><item name="android:colorBackgroundCacheHint">@null</item><item name="android:windowNoTitle">true</item><item name="android:backgroundDimEnabled">false</item><item name="android:windowAnimationStyle">@null</item><item name="android:windowContentOverlay">@null</item></style>

android:windowIsTranslucent表示透明。
android:windowAnimationStyle表示动画,如果锁屏Activity关闭掉后,打开的是APP,可能会短暂黑屏,那么就是因为Activity关闭动画导致的,这种需求下,可以不加这个动画。如果打开的是主页面,不会出现这个问题。

转载地址:https://blog.csdn.net/u010696525/article/details/51445515

Android仿网易云音乐中锁屏后在开锁界面插屏功能相关推荐

  1. android仿网易云音乐、即时通讯、bilibili、沙漏动画等源码

    Android精选源码 android仿网易云音乐安卓版源码 android开源即时通讯,实时传讯IM源码 android类似淘宝的商品详情页源码 android面向.艺术家.设计师等创意类作品源码 ...

  2. Android 仿网易云音乐App

    因为工作实在是有点忙,所以还没完成成品,就先挂到GitHub上.日后慢慢更新啦. 项目地址 GitHub地址,希望大佬们点个star GitHub仿网易云音乐App 效果展示 注:因为视频太模糊,每日 ...

  3. android 网易云音乐上滑动画,Android 仿网易云音乐 音轨跳动效果

    网易云音乐的Loading效果,大家应该也比较熟悉了,效果是一个红色音轨不断跳动的效果,一般用于Loading等待时填充使用.本篇来自定义这个效果. Android 仿网易云音乐 音轨跳动View.g ...

  4. Android仿网易云音乐播放页面 背景虚化碟片效果

    1.效果图 仿网易云音乐播放页面,主要有4个关键点: 背景虚化.获取音乐的专辑封面,将此图片作为背景图,并进行模糊虚化处理 碟片合成.获取音乐的专辑封面,和黑色碟片图片进行合成 碟片旋转.音乐播放时, ...

  5. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、风扇叶片效果等源码...

    2019独角兽企业重金招聘Python工程师标准>>> Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android ...

  6. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  7. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码...

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  8. Android仿网易云音乐播放界面

    概述 网易云音乐是一款非常优秀的音乐播放器,尤其是播放界面,使用唱盘机风格,显得格外古典优雅.这里抛砖引玉,原文地址:http://www.jianshu.com/p/cb54990219d9 首先来 ...

  9. 音乐歌单Android,仿网易云音乐歌单界面 Header滑动效果

    这是我的第一篇博客,做Android 开发2年多以来,曾经也有过写一些技术博客的想法,但因为有时候因为懒,有时候工作忙加班多而力不从心,所以迟迟没有开始写自己的博客.最近正好工作不忙,想写一些博客,记 ...

最新文章

  1. 1199: 房间安排
  2. 《数学之美》第5章 隐含马尔可夫模型
  3. 解决 minicom 不能接收键盘输入问题
  4. Android Bitmap 研究与思考(上篇)
  5. OpenCASCADE绘制测试线束:简单的向量代数和测量之测量命令
  6. [[UIScreen mainScreen] bounds]获取尺寸不对
  7. SAP CRM Fiori搜索没有命中情况下的调试细节
  8. oracle导出数据dummy,oracle导出表结构1
  9. 菜鸟成长记(十一)----- 操蛋的2016与未知的2017
  10. python-演练-通过描述符来控制另一个类的实例化参数
  11. linux常用命令--实用小技巧
  12. 探索流程的奥秘之三, 如何梳理业务流程
  13. maya mentray_mental ray2016中文版下载|
  14. uipath 验证码_UiPath邮件自动化Save Attachments的介绍和使用
  15. 微信OpenIdUnionID
  16. 优雅降级实现IE8的transform平移属性
  17. (三) SiamRPN从论文角度介绍
  18. 泰勒公式系列之一多项式逼近
  19. 垃圾小白羊leetcode刷题记录2
  20. 多分类问题中sklearn的RFECV指定scoring函数

热门文章

  1. 爱一个不爱你的人,就像在机场等一艘船
  2. Unity 2D游戏 粒子系统在Game窗口不显示
  3. python跑一亿次循环_python、rust、julia循环10亿次的时间对比
  4. SAR成像系列:【1】合成孔径雷达(SAR)成像概述
  5. Future和FutureTask
  6. 塔式服务器加硬盘,联想T280塔式服务器RAID卡设置
  7. 火炬电阻_火炬神经网络的对抗性攻击和防御
  8. 怎么理解PCB阻焊开窗?
  9. [转]Java面试近一个月的面试总结
  10. 魔兽风之谷冰封王座rpg六星合成整理