android 开机播放视频

http://blog.csdn.net/deeplee021/article/details/41042985

Android 开关机动画的实现及支持MP4视频播放

标签: 视频动画mediaplayerframeworksbootanimation
672人阅读 评论(0) 收藏 举报
分类:
Android ROM开发(7)

原创文章,转载请注明出处,谢谢。


一,前言

对于开机动画的实现原理,网上很多,本文不做讲述。本文仅针对开关机动画支持Mp4视频及实现关机动画做简略讲述

二,前期准备及说明

开机动画MP4视频文件名及路径:/system/media/boot.mp4、/data/local/boot.mp4

关机动画MP4视频文件名及路径:/system/media/shutdown.mp4、/data/local/shutdown.mp4

三,需要修改的文件

1.开机动画的MP4视频支持

frameworks/base/cmds/bootanimation/BootAnimation.cpp

frameworks/base/cmds/bootanimation/BootAnimation.h

frameworks/base/cmds/bootanimation/Android.mk

2.关机动画实现

frameworks/base/cmds/bootanimation/BootAnimation.cpp

frameworks/base/cmds/bootanimation/bootanimation_main.cpp

ShutdownThread.java

init.rc

四,具体修改

   播放MP4格式支持较为简单,主要是在

frameworks/base/cmds/bootanimation/BootAnimation.cpp添加video()方法并在readytorun判断文件是否存在,并在threadloop判断是否进入video()方法。

video方法代码如下

[cpp] view plain copy print ?
  1. bool BootAnimation::video()  
  2. {  
  3.     const float MAX_FPS = 60.0f;  
  4.     const bool LOOP = true;  
  5.     const float CHECK_DELAY = ns2us(s2ns(1) / MAX_FPS);  
  6.   
  7.     eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);  
  8.     eglDestroySurface(mDisplay, mSurface);  
  9. #if 0  
  10.     float asp = 1.0f * mWidth / mHeight;  
  11.     SurfaceComposerClient::openGlobalTransaction();  
  12.     mFlingerSurfaceControl->setPosition(mWidth, 0);  
  13.     mFlingerSurfaceControl->setMatrix(0, 1 / asp, -asp, 0);  
  14.     SurfaceComposerClient::closeGlobalTransaction();  
  15. #endif  
  16.     sp<MediaPlayer> mp = new MediaPlayer();  
  17.     mp->reset();  
  18.     if(!mShutdown) {  
  19.         if(systemfile) {  
  20.             mp->setDataSource(USER_BOOTVIDEO_FILE, NULL);  
  21.         } else {  
  22.             mp->setDataSource(SYSTEM_BOOTVIDEO_FILE, NULL);  
  23.         }  
  24.     } else {  
  25.         if(systemfile) {  
  26.             mp->setDataSource(USER_SHUTDOWN_VIDEO, NULL);  
  27.         } else {  
  28.             mp->setDataSource(SYSTEM_SHUTDOWN_VIDEO, NULL);  
  29.         }  
  30.     }  
  31.     mp->setLooping(false);  
  32.     Parcel*  _parcel = new Parcel;  
  33.     mp->setParameter(100, *_parcel);  
  34.     mp->setVideoSurfaceTexture(mFlingerSurface->getIGraphicBufferProducer());  
  35.     mp->prepare();  
  36.     mp->start();  
  37. #if 1  
  38.     while(true) {  
  39.         if(exitPending())  
  40.             break;  
  41.         usleep(CHECK_DELAY);  
  42.         checkExit();  
  43.     }  
  44. #endif  
  45.     mp->stop();  
  46.     return false;  
  47. }  

关机动画实现 需要修改init.rc 添加如下服务

service shutdownanim /system/bin/bootanimation -shutdown

    user graphics

    group graphics



ShutdownThread.java修改beginShutdownSequence方法把如下代码注释掉

[java] view plain copy print ?
  1. ProgressDialog pd = new ProgressDialog(context);  
  2.         pd.setTitle(context.getText(com.android.internal.R.string.power_off));  
  3.         pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));  
  4.         pd.setIndeterminate(true);  
  5.         pd.setCancelable(false);  
  6.         pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
  7.   
  8.         pd.show();  

并添加android.os.SystemProperties.set("ctl.start", "shutdownanim");即可


最后重新编译boot及boota 重启即可


你可能感兴趣的:(动画,视频,mediaplayer,frameworks,Bootanimation)