KnowMyWeapons Part2

在快速阅读给出的文档材料并有选择的详细阅读其中部分章节后,选择5个topics来实现Bilibili App的部分功能。

App-to-App

分享视频或动态

share
ShareScreenShot
可使用 Share Data来实现对视频或动态、图片的分享.
并且支持分享到B站内或者QQ、微博等其他6个App。站内分享还需使用 Receive Data在站内接收数据。

复制评论

copy
评论区长按某条评论可自动复制到剪贴板,该功能可用Copy and Paste实现。
同时还可实现评论输入文字时粘贴剪贴板的内容。

Audio, video, and camera

播放视频是B站App的主要功能,为了使用的方便B站也在此基础上添加了许多细节功能。

播放视频、音频

audio
video
B站最近的更新中细分了视频区与音频区,音频和视频的播放都可以使用Play audio and video with MediaPlayer
但是,我认为无法严格实现B站的播放功能或者说是不能播放B站的视频。B站缓存在本地的视频格式是.blv,本地播放器检测不出来,且B站会对其进行分段。

稍后播放

playlist
稍后播放即添加到播放列表,可以用Mediaitems,playlists,andtracks实现。

后台播放

backplay
B站同样支持视频和音频的后台播放,可使用Play media in the background实现。

截图

screencap
在视频播放界面可以使用截图保存喜欢的画面,这个就是用Sreen capture来完成。
文档中还考虑到了React to capture item resizing or device
即在截图过程中,应用调整了页面这个问题。对此 Screen Capture 的解决方案是调用 Recreate方法,并舍弃之前的所有帧。截图这个功能用起来可能只要一眨眼的功夫,然而背后实现却并不简单,需要完备的考虑各种情况。

Devices,sensors,and Power

这一章节中有许多有趣的sensor,类似于一个sensor科普文章。介绍了许多诸如陀螺仪、罗盘、重力感应器等许多手机上常见到的感应器。

重力旋转

gravity
横屏180度旋转播放界面都会自动旋转来适应,难以通过截图来体现该功能。这个功能是通过Sensor中的Accelerometer来做到的。
Sensor这一章都十分有趣,介绍了各种传感器的一些原理。比如在这个传感器中,对于旋转感应的是运动向量和重力向量之间的夹角。这也解释了为什么使用这个sensor时运动方向不能与重力方向共线。
回想生活中的使用场景,从站着看手机到坐下,屏幕不会旋转,而竖屏到横屏则会切换正是因为前者的运动方向是沿Z轴垂直于地面的。

自动调节亮度

这个功能同样难以通过截图体现。播放界面在关灯后会自动变暗正是靠Light sensor实现的感知环境亮度,并依此调节屏幕亮度。

Files, folders, and libraries

缓存、播放本地视频

download
用户可以在使用B站播放已经缓存在本地的视频,这就需要打开本地的文件了,可以通过Open files and folders with a picker来实现。
不过B站是将.blv文件直接显示在App内,而不是使用picker选择。猜测是因为格式原因,并不能使用B站播放其他视频。
缓存文件则可以通过Create,write,and read file来在本地创建文件。

Launching, resuming, and background tasks

Background tasks包括了之前提到过的后台播放功能,主要是关于后台任务等。

后台下载

download
B站支持在后台缓存视频,后台这个可以用Background tasks
文章中详细介绍了后台任务从创建到debug,还有处理被取消的后台任务,监控后台任务进度等。

总结

感受到了其系统性和完善性。如果说功能是一颗树的枝干,那么开发人员还要尽可能考虑到枝桠上的每片叶子。着实不易。