首页 > 系统 > Android > 正文

android4.4 添加关机音乐关机动画

2019-11-08 19:27:08
字体:
来源:转载
供稿:网友

4.4的开关机动画的服务为bootanimation (全志allwinner平台下)

init.rc里面有下面一行,开机时候会调用此服务 service bootanim /system/bin/bootanimation。surfaceflinger里面用过ctrl_start 调用服务,详细可以搜索代码。

虽然bootanim名称为开机动画,但代码里面其实包含了关机动画和关机音乐相关的内容。

51         PRoperty_get("sys.shutdown_animation", cmd, "boot");                                       52         const char* url = "/system/media/boot.wav";                                                53         if (!strcmp(cmd, "shutdown")) {           54             url = "/system/media/shutdown.wav";   55         }                                         

sys.shutdown_animation 属性值为shutdown时,播放shuudown.wav

关机音乐在哪里启动bootanimation 并设置属性文件sys.shutdown_animation 为shutdown呢?

./frameworks/base/services/java/com/android/server/power/ShutdownThread.java中的beginShutdownSequence(Context context) 函数中

373         // throw up an indeterminate system dialog to indicate radio is374         // shutting down.375         final ProgressDialog pd = new ProgressDialog(context);376         pd.setTitle(context.getText(com.android.internal.R.string.power_off));377         pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));378         pd.setIndeterminate(true);379         pd.setCancelable(false);380         pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);381382         int shutdownduration = SystemProperties.getInt("persist.sys.shutdownduration", 0);383         if (shutdownduration <= 0) pd.show();

persist.sys.shutdownduration需要设置成>0,设置成1.

如下代码会设置sys.shutdown_animation为shutdown,并开启bootanim服务。

446     public void run() {447         BroadcastReceiver br = new BroadcastReceiver() {448             @Override public void onReceive(Context context, Intent intent) {449                 // We don't allow apps to cancel this, so ignore the result.450                 actionDone();451             }452         };453         int shutdownduration = SystemProperties.getInt("persist.sys.shutdownduration", 0);454         if(!mBootFastEnable){455             int value = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.ACCELER    OMETER_ROTATION, 0, UserHandle.USER_CURRENT);456             int rotation = Surface.ROTATION_0;457             long startTime = 0;458             if (shutdownduration > 0) {459                 IWindowManager mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("w    indow"));460                 if (mWindowManager != null) {461                     try{462                         rotation = mWindowManager.getRotation();463                         mWindowManager.freezeRotation(Surface.ROTATION_0);464                         mWindowManager.updateRotation(true, true);465                     } catch (RemoteException e) {466                         e.printStackTrace();467                     }468                 }469                 if (rotation != Surface.ROTATION_0) {

470                     SystemClock.sleep(600);471                 } else {472                     SystemClock.sleep(200);473                 }474                 startTime = SystemClock.uptimeMillis();475                 SystemProperties.set("sys.shutdown_animation", "shutdown"); //设置sys.shutdown_animation值为shutdown,在bootanim服务中会用到次书属性判断是开机还是关机476                 SystemProperties.set("service.bootanim.exit", "0");477                 SystemProperties.set("ctl.start", "bootanim");478             }

。。。。。。。。。。。。。。。。。

577             if (shutdownduration > 0) {578                 long sleepTime = SystemClock.uptimeMillis() - startTime; //保证anim运行时间shutdownduration,sleep 确保anim运行完。579                 sleepTime = shutdownduration - sleepTime;580                 if (sleepTime > 0)581                     SystemClock.sleep(sleepTime);582                 if (value == 0) {583                     Settings.System.putInt(mContext.getContentResolver(), Settings.System.USER_ROTATION, rot    ation);584                 }585                 Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.ACCELEROMETER_R    OTATION, value, UserHandle.USER_CURRENT);586             }587                 rebootOrShutdown(mReboot, mRebootReason);

总结:

设置persist.sys.shutdownduration属性的值即可调用关机动画和音乐,属性值对应ms,为anim运行的时间。比如播放音乐的时间,播放动画的时间。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表