iphone QQ音乐锁屏歌词实现思路



先用户之所想

  亚德里安.斯莱沃斯基在《需求》一书提到,真正的需求并不是用户明确提出的,用语言表述的部分。这些部分你看得见,你的竞争对手也同样看得见,只抓住看得见的部分,你就已经陷入红海了。

 

  只有想用户之所想,急用户之所急,在用户了解自己的需求之前,就帮他们提供可行的解决方案,才能创造出抓住人心的产品。

 

  上图是当前iphone播放歌曲的锁屏界面,ios系统在锁屏界面提供显示的信息目前只有4个:播放歌曲名字(十年)、演唱者(陈奕迅)、歌曲所属专辑(黑白灰)和专辑图片,而且在锁屏环境下,应用程序在后台运行的时候,程序的能力范围十分有限,系统也没有提供在锁屏界面下可以显示歌词的api接口,目前市面上的音乐播放器也都只能做到这一步。

 

  传统上,我们在使用在使用音乐播放器播放歌曲时,当我们离开状态做其他事情时,通常的习惯是锁住屏幕,让音乐在后台播放。当对某句歌词突然触动了你的心扉或者引起你想看歌词的兴趣时,可能需要如下的操作步骤:

 

  第一步,解锁屏幕,甚至可能需要你输入密码才能解锁。

 

  第二步,双击Home键,从后台打开音乐客户端。

 

  第三步,通过一次或几次的点击操作跳转到歌词界面才能查看到歌词。

 

  我们发现至少要经过上面的3个步骤才能满足这个需求,相关数据统计也表明每多一步操作转换率折损是50%。那么是否在iphone锁屏情况下,无论用户是通过Home键还是电源键,只要点亮了屏幕,就能显示当前的歌词,而不需要经过如此多而繁杂的操作步骤呢?


功能需求提炼

 

  通过背景介绍基本能明确需要解决的功能需求点:1、锁屏情况下,点亮屏幕,显示歌词;2、设计开关,用户也可以选择关闭锁屏条件下显示歌词的功能。

 

技术实现分析

 

  通过前面介绍过,基本了解应用程序在锁屏界面的展示能力范围非常有限,在锁屏界面条件下显示歌词本身就是一个难题,在这基础上又要追求显示效果美观优雅,要让用户拥有卓越的体验,更不是一件容易的事情。既然ios的SDK没有提供相关的api和歌词显示位置给锁屏界面,运用几种不同方案不断进行尝试,基本能实现显示歌词,但显示效果不够理想,也会引发各种不可预知的问题,只能想想还可以通过怎样的特殊方法来实现。

 

  经过思考与分析,不断尝试,可以找到这样的突破点: 锁屏界面显示的专辑图片是我们通过应用程序来设置的,这个是程序控制范围内,利用这个突破点,考虑通过图片合成与截取技术,把当前歌词截取成图片快照,和专辑图片一起合成一张新的图片,再将新合成的专辑图片设置给系统,相当于换了新的专辑图片,这张专辑图片带有当前歌词信息,当下一句歌词更换的时候,再重新合成另一张新图片。

 

 

实现流程及解释:

 

1. 歌词更新:应用程序通过NSTimer定时器,每隔一个时间周期,定时器NSTimer回调我们的应用程序接口,更新歌词信息;当用户点亮屏幕或者屏幕暗的时候,应用程序是如何捕获到这种状态的改变呢?

 

  这又是另一个技术难点,通过研究发现,有两种方法可以监听,一种是监听内核层DarwinNotification,在Darwin中,有很多的系统事件,但apple的api文档描述这些api使用有限制,也就是灰色地带的api,所以能不用则不用;另一种方法可以通过notify_get_state来获取com.apple.springboard.hasBlankedScreen 的状态值,通过状态值我们可以判断屏幕状态,屏幕亮或者暗系统会给出不同状态值,然后根据状态值,通过NotificationCenter发送消息通知给相应的函数处理,处理的流程如下图:  

 

 


 

2.合成新图片,调用ios系统的api截取和合成新的专辑图片。

 

3. 更新系统信息,通过sdk提供接口,MPNowPlayingInfoCenter的setNowPlayingInfo方法,把锁屏显示的专辑图替换成我们新合成的图片,从而实现锁屏歌词功能。

 

迭代改进优化

 

         精品不是一蹴而成的,更不可能因为功能需求实现就告终,而是要不断经过打磨,迭代改进与优化。

 

1.性能考虑,歌词每隔一小段(不到1秒)时间,就会进行更新,在没有必要的情况下,不需要做额外的图片合成操作,比如程序处于后台,屏幕暗的状态,又如程序处于前台的状态。以节省系统CPU和电量的开销,经过几次的打磨,做到不浪费一次额外操作,把性能消耗做到最优。

 

2.体验考虑,添加此功能的开关控制,用户可以自己定义是否需要在锁屏状态下显示歌词。

 

3.歌词显示位置、字体大小、渐变的字体颜色等细节进行美化及调适,让显示效果更富有有立体感。

 

  前后效果对比:

 


转自 腾讯大讲堂,实现代码后续呈上 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值