frameworks/base/cmds/bootanimation/BootAnimation.cpp

在原来开机动画的基础上,获取动画文件方法

BootAnimation::getAnimationFileName(){

  ...

  state = checkBootState() ? 0 : 1; //若state 为1 调用关机动画

  ...

}

bool BootAnimation::checkBootState(void){
    char value[PROPERTY_VALUE_MAX];
  bool ret = true;
    property_get("sys.shutdown.requested", value, "null"); //若该属性非空,返回false

  if (strcmp(value, "null") != 0) {

     ret = false;

  }

     return ret;

}
有上述可知 如要启动关机动画只需,启动 BootAnimation服务 并且 给sys.shutdown.requested设置一个非空属性即可
-----------------------------------

frameworks/base/services/java/com/android/server/pm/ShutdownThread.java

ShutdownThread一个线程类 在 run方法里面 添加

SystemProperties.set(SHUTDOWN_ACTION_PROPERTY, reason);  //SHUTDOWN_ACTION_PROPERTY为sys.shutdown.requested

点击关机dialog执行

private static void beginShutdownSequence(Context context) {

  ...

  if (FeatureQuery.FEATURE_BOOT_ANIMATION && checkAnimationFileExist()) {

    lockDevice();

    showShutdownAnimation();

    ...

  }

  ...

}

private static void showShutdownAnimation() {

  SystemProperties.set("ctl.start", "bootanim");  //调用开机动画服务 

}

==================================

开机动画停止

frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

void SurfaceFlinger::bootFinished(){

  ...

  property_set("service.bootanim.exit", "1"); //设置停止动画属性

}

-------------------

frameworks/base/cmds/bootanimation/BootAnimation.cpp

在动画循环中调用方法 checkExit()

void BootAnimation::checkExit() {

  char value[PROPERTY_VALUE_MAX];

  property_get(EXIT_PROP_NAME, value, "0");//EXIT_PROP_NAME为字符串 service.bootanim.exit

  int exitnow = atoi(value);

  if (exitnow) {

    requestExit();

  }

}

 

相关文章:

  • 2021-05-14
  • 2022-12-23
  • 2022-01-05
  • 2021-12-07
  • 2021-10-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-22
  • 2021-06-23
  • 2022-12-23
  • 2022-02-11
  • 2022-12-23
相关资源
相似解决方案