这里我本来准备反编译一下网易云音乐,但是发现github上有一个仿照网易云音乐的开源项目,参考自 https://github.com/aa112901/remusic ,其他的应用在锁屏上显示的原理也都一样,不过需要在手机中为应用开启  锁屏显示  这一权限

首先我们要明白所有显示在手机上界面都是由一层一层的Window构成(Activity是一个Window,锁屏也是一个Window,具体大家可以去了解一下Window)。

ok,明白了这个原理我们不难想象,其实只要添加一个window并且保证他的z-order在锁屏之上就能展示出来我们想要的效果。我们可以在手机开启开发者权限并且打开usb调试之后在命令行输入adb shell dumpsys window就可以看到window的层级显示,此时发现网易云音乐的那个锁屏显示window是在锁屏之上的。

Window #9 Window{8990dbc u0 com.netease.cloudmusic/com.netease.cloudmusic.activity.LockScreenActivity}:mDisplayId=0 stackId=21 mSession=Session{e8728e8 16899:u0a10162} mClient=android.os.BinderProxy@551a5afmOwnerUid=10162 mShowToOwnerOnly=true package=com.netease.cloudmusic appop=NONEmAttrs={(0,0)(fillxfill) sim={adjust=pan} layoutInDisplayCutoutMode=always blurRatio=1.0 blurMode=0 ty=BASE_APPLICATION fmt=TRANSPARENT wanim=0x10302f8 sysuil=truefl=LAYOUT_IN_SCREEN LAYOUT_INSET_DECOR SHOW_WHEN_LOCKED DISMISS_KEYGUARD SPLIT_TOUCH HARDWARE_ACCELERATED DRAWS_SYSTEM_BAR_BACKGROUNDSpfl=FORCE_DRAW_STATUS_BAR_BACKGROUNDvsysui=HIDE_NAVIGATION LAYOUT_STABLE LAYOUT_HIDE_NAVIGATION LAYOUT_FULLSCREEN IMMERSIVE_STICKY}Requested w=1080 h=2160 mLayoutSeq=3520mHasSurface=true isReadyForDisplay()=true mWindowRemovalAllowed=falseWindowStateAnimator{db3a78f com.netease.cloudmusic/com.netease.cloudmusic.activity.LockScreenActivity}:Surface: shown=true layer=0 alpha=1.0 rect=(0.0,0.0) 1080 x 2160 transform=(1.0, 0.0, 1.0, 0.0)mHandleByGesture=falseisOnScreen=trueisVisible=trueignoreInput=falsemMiuiNotFocusable=falsemMiuiNotTouchModal=false

以下分析过程皆以github上的仿网易云开源项目为例,一般实现参考https://blog.csdn.net/chenrenxiang/article/details/72528952 中的demo

1、Activity启动的条件

我们要对灭屏状态进行监听,当屏幕熄灭的时候去启动Activity(锁屏的加载也是在灭屏的时候进行)

else if (Intent.ACTION_SCREEN_OFF.equals(action) ){if(isPlaying() && !mIsLocked){Intent lockscreen = new Intent(this, LockActivity.class);lockscreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(lockscreen);}}

2、在Activity中设置Window的flag

具体的各个windo的flag意思大家可以进去源码看,我也仅仅知道这样设置即可。

这里想记录一个知识点:最终的flags是由多个flag用”或(|)”连接起来的,也就是一个变量。

(参考别人的)举个栗子:0x0001 表示类型A, 0x0010 表示类型B,0x0100 表示类型C,0x1000 表示类型D,那么当类型ABD同时存在,但C不存在时时只用存储 0x1011 即可,相比于使用4个 boolean 值来说,这种方案可以显著的节省内存空间的占用,并且用户设置起来也比较方便,可以使用或”|“同时设置多个类型。当然弊端也是有的,那就是单独更改其中一个参数时时稍微麻烦一点,需要进行一些位运算。

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //用于去掉系统锁屏页| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //使Activity在锁屏时能够显示);
在AndroidManifest文件中添加权限
<uses-permission android:name = "android.permission.DISABLE_KEYGUARD"/>

在参考的开源项目中,显示出的window就是LockActivity,对应的布局文件就是activity_lock,其中的自定义view还有调用的第三方库这里就不在进行分析。所以归根结底还是像我们平时写一个页面一样,只不过需要在activity中设置一些对应window的flag让他可以在锁屏上显示。

3、滑动后显示锁屏页

我理解的是要把Activity直接finish掉就好了,但是看这个项目中的代码好像是直接调用了postInvalidate()方法,不太理解,暂时先放下,也希望大家知道可以告诉我。

网易云音乐等三方app如何在锁屏显示相关推荐

  1. Python网易云音乐爬虫大数据分析可视化系统——大屏数据可视化开发之路

    介绍 现在比较流行的大数据数据可视化都是大屏,有钱的人会使用阿里云全家桶的DataV或者商业化的大屏解决方案,但是在国内还是小公司比较多,本人50年大数据开发经验,精通数据可视化,曾经处理过百万亿级别 ...

  2. Flutter实战 | 从 0 搭建「网易云音乐」APP(五、播放功能逻辑)

    本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来. 下面是该APP 功能的思维导图: 前期回顾: 1.Flutter实战 | 从 0 搭建「网易云音乐」APP(一.创建 ...

  3. Flutter实战 | 从 0 搭建「网易云音乐」APP(三、每日推荐、推荐歌单)

    本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来. 下面是该APP 功能的思维导图: 前期回顾: •Flutter实战 | 从 0 搭建「网易云音乐」APP(一.创建项 ...

  4. “老四”网易云音乐急上市:一个音乐APP的终点站?

    来源 | 螳螂财经 文 | 李永华 5月26日,在此前数次的上市"烟雾弹"消息之后,网易云音乐此次正式向港交所公开递交了招股书. 磕磕绊绊这么多年,熬死了虾米音乐等一众格调比自己还 ...

  5. 网易云音乐网络库跨平台化实践

    导读: 2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到网易云信.网易音视频实验室.网易云音乐的技术 ...

  6. 网易云音乐刷听歌量_网易云音乐极速版悄然上线!听歌体验同之前没有差别

    了解更多热门资讯.玩机技巧.数码评测.科普深扒,点击右上角关注我们 ---------------------------------- 7月2日消息,"网易云音乐极速版"App在 ...

  7. 用Compose实现轻量版网易云音乐

    简述 这是一个几乎全部使用Compose实现UI各组成部分的纯Kotlin Android App,应用取名Compose Many是因为最初想实现集各种小功能的工具软件,当然主要还是想也借此来学习C ...

  8. 抓取网易云音乐用户评论

    段子手与神编剧共存,矫情文艺与励志故事齐飞 用户热评是网易云音乐除智能推荐外的第二法宝 语料库是所有自然语言处理模型的知识基础,甚至决定了模型的适应范围,毕竟 Garbage in, garbage ...

  9. 网易云音乐上市首日收跌2.49% 盈利困境仍待解

    二次启动IPO计划之后,网易云音乐独立上市终于如愿以偿.12月2日,网易云音乐正式挂牌港交所. 除了线下举行上市仪式外,网易云音乐还通过网易伏羲沉浸式活动系统"瑶台"举办了号称全球 ...

最新文章

  1. 求最大素数的c语言,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  2. Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb
  3. 一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)
  4. ZZULIOJ 1097: 计算平均成绩(函数专题)
  5. 深度学习框架zf_谈谈深度学习框架的数据排布
  6. JMeter:生成漂亮的多维度的HTML报告
  7. jango web开发指南_Web前端“月薪过万”必读的一些入门书籍和网站!
  8. iphonex黑屏开不了机_iphonexr死机,iphonexr开不了机
  9. 简述springmvc过程_Springmvc执行流程
  10. 初学编程:算法编程是什么意思?盘点最常用的 5 大算法!
  11. CATIA V5-6 R2017 轴类零件设计
  12. 题5 正确的Java垃圾回收说法
  13. 空间直线与球面相交算法
  14. 我的第一个python程序源代码_科学网—我的第一个Python程序——删除代码前行号的小工具 - 闫小勇的博文...
  15. javascript顺序点击文字验证
  16. 使用ffmpeg将m3u8文件转为mp4
  17. Spark SQL: Relational Data Processing in Spark
  18. 使用C#自带的ReportViewer控件生成报表
  19. 小程序小游戏更新机制总结
  20. http://www.cs.virginia.edu/~gfx/courses/2004/Intro.Fall.04/handouts/06-light.pdf

热门文章

  1. 基于深度学习的点云分割网络及点云分割数据集
  2. react-native-calendars的使用
  3. 血泪!pyinstaller打包文件过大的解决方法
  4. unity 显示太阳_太阳系究竟有多大?来看看天文学家是怎么解答的
  5. 创建符合MMdetection要求的训练数据集
  6. 富士康计算机类笔试题,富士康笔试题目及答案
  7. Hadoop面试45个题目及答案
  8. TCP/IP 之 大明王朝邮差
  9. dlink客户端 android,DLink IP Cam Viewer by OWLR
  10. 美国姑娘项美丽与邵洵美的跨国恋