完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Android的开机有两个阶段:Linux启动、Android启动。开机界面有三个:bootloader启动界面、kernel启动界面、bootanimation启动界面。
第一个开机界面 第一个开机界面在Bootloader启动Linux内核时的启动画面(Linux小企鹅的画面 在Android 1.5及以上版本已取消加载)。 在默认情况下,这个画面是不会出现的,除非我们在编译内核的时候,启用以下两个编译选项: CONFIG_FRAMEBUFFER_CONSOLE CONFIG_LOGO 第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为: Device Drivers —> Graphics support —> Console display driver support —> Framebuffer Console support。 第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为: Device Drivers —> Graphics support —> Bootup logo。 第二个开机界面 第二个开机画面是在init进程启动的过程中显示的,第二个开机画面的内容是由文件 initlogo.rle 来指定的,如果文件 initlogo.rle 文件不存在,或者在显示它的过程中出现异常,那么 Android 就以文本的方式来显示第二个开机画面,即向编号为0的控制台(/dev/tty0)输出“ANDROID”这7个字符。 第三个开机界面 第三个开机画面是由应用程序bootanimation来负责显示的。应用程序bootanimation在启动脚本init.rc中被配置成了一个服务,bootanimation 程序会检查系统制定目录下是否存在动画文件(.zip文件),如果不存在,则显示的第三个开机画面是Android系统默认的开机动画(明暗闪烁的 Android Logo),否则的话,第三个开机画面就是由用户自定义的开机动画。在这个基础上我们可以调用 mediaPlayer 的接口来实现播放视频 实现步骤 步骤一: 找一个确定会编译到的mk文件,比如device/rockchip/rk3288/rk3288.mk,把bootvideo.mp4入进该文件所在目录中,在该文件添加以下语句: PRODUCT_COPY_FILES += device/rockchip/rk3288/bootanimation.zip:system/media/bootvideo.mp4 步骤二: 在源码 frameworks/base/cmds/bootanimation/BootAnimation.cpp 中添加代码 找到该位置添加视频路径 #define USER_SHUTDOWN_ANIMATION_FILE "/data/local/shutdownanimation.zip" #define SYSTEM_SHUTDOWN_ANIMATION_FILE "/system/media/shutdownanimation.zip" #define SYSTEM_BOOTVIDEO_FILE "/system/media/bootvideo.mp4" //视频路径 找到 BootAnimation::readyToRun() 函数在该位置添加视频标识 bool encryptedAnimation = atoi(decrypt) != 0 ||!strcmp("trigger_restart_min_framework", decrypt); mVideo = false; if(access(SYSTEM_BOOTVIDEO_FILE,R_OK) == 0) mVideo = true; else mVideo = false; ZipFileRO* zipFile = NULL; 找到 BootAnimation::threadLoop() 函数添加判断 if (mZip == NULL) { r = android(); } else if (mVideo) { r = video(); } else { r = movie(); } 导入 IMediaHTTPService #include 添加视频播放函数 BootAnimation::video() bool BootAnimation::video() { int time_now,time_max=0; eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface(mDisplay, mSurface); sp sp mediaplayer->reset(); mediaplayer->setDataSource(httpService,SYSTEM_BOOTVIDEO_FILE,NULL); //设置播放资源 mediaplayer->setLooping(false); mediaplayer->setVideoSurfaceTexture(mFlingerSurface->getIGraphicBufferProducer()); mediaplayer->prepare(); mediaplayer->start(); if(mediaplayer->isPlaying()) mediaplayer->getDuration(&time_max); while(true) { mediaplayer->getCurrentPosition(&time_now); if(exitPending()) break; usleep(50); if(time_now==time_max) checkExit(); } mediaplayer->stop(); mediaplayer->disconnect(); mediaplayer.clear(); return false; } 最后修改头文件 frameworks/base/cmds/bootanimation/BootAnimation.h 并且添加增加的两个成员变量 sp sp + bool mVideo; + bool video(); ZipFileRO *mZip; int mHardwareRotation; 重新编译后我们即可看到开机播放视频的效果。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1924 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2406 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5193 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:35 , Processed in 0.712954 second(s), Total 75, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号