在快速阅读给出的文档材料并有选择的详细阅读其中部分章节后,选择5个topics来实现Bilibili App的部分功能。
App-to-App
分享视频或动态
可使用 Share Data来实现对视频或动态、图片的分享.
并且支持分享到B站内或者QQ、微博等其他6个App。站内分享还需使用 Receive Data在站内接收数据。
复制评论
评论区长按某条评论可自动复制到剪贴板,该功能可用Copy and Paste实现。
同时还可实现评论输入文字时粘贴剪贴板的内容。
Audio, video, and camera
播放视频是B站App的主要功能,为了使用的方便B站也在此基础上添加了许多细节功能。
播放视频、音频
B站最近的更新中细分了视频区与音频区,音频和视频的播放都可以使用Play audio and video with MediaPlayer
但是,我认为无法严格实现B站的播放功能或者说是不能播放B站的视频。B站缓存在本地的视频格式是.blv,本地播放器检测不出来,且B站会对其进行分段。
稍后播放
稍后播放即添加到播放列表,可以用Mediaitems,playlists,andtracks实现。
后台播放
B站同样支持视频和音频的后台播放,可使用Play media in the background实现。
截图
在视频播放界面可以使用截图保存喜欢的画面,这个就是用Sreen capture来完成。
文档中还考虑到了React to capture item resizing or device
即在截图过程中,应用调整了页面这个问题。对此 Screen Capture 的解决方案是调用 Recreate方法,并舍弃之前的所有帧。截图这个功能用起来可能只要一眨眼的功夫,然而背后实现却并不简单,需要完备的考虑各种情况。
Devices,sensors,and Power
这一章节中有许多有趣的sensor,类似于一个sensor科普文章。介绍了许多诸如陀螺仪、罗盘、重力感应器等许多手机上常见到的感应器。
重力旋转
横屏180度旋转播放界面都会自动旋转来适应,难以通过截图来体现该功能。这个功能是通过Sensor中的Accelerometer来做到的。
Sensor这一章都十分有趣,介绍了各种传感器的一些原理。比如在这个传感器中,对于旋转感应的是运动向量和重力向量之间的夹角。这也解释了为什么使用这个sensor时运动方向不能与重力方向共线。
回想生活中的使用场景,从站着看手机到坐下,屏幕不会旋转,而竖屏到横屏则会切换正是因为前者的运动方向是沿Z轴垂直于地面的。
自动调节亮度
这个功能同样难以通过截图体现。播放界面在关灯后会自动变暗正是靠Light sensor实现的感知环境亮度,并依此调节屏幕亮度。
Files, folders, and libraries
缓存、播放本地视频
用户可以在使用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包括了之前提到过的后台播放功能,主要是关于后台任务等。
后台下载
B站支持在后台缓存视频,后台这个可以用Background tasks。
文章中详细介绍了后台任务从创建到debug,还有处理被取消的后台任务,监控后台任务进度等。
总结
感受到了其系统性和完善性。如果说功能是一颗树的枝干,那么开发人员还要尽可能考虑到枝桠上的每片叶子。着实不易。