【Android笔记】【壁纸一】默认壁纸及默认壁纸组件

最近工作内容发生了一些变化,因此对前段时间的壁纸学习进行一个总结。

本章主要介绍,手机在第一次开机时,所使用的默认壁纸以及默认壁纸服务。

  • 默认壁纸

    • 默认壁纸的代码加载位置在framework/base/core/java/android/app/WallpaperManager.java中,openDefaultWallpaper方法可以用于获取默认壁纸,像默认壁纸组件ImageWallpaper,就是用该方法来获取默认的壁纸

    • 【Android笔记】【壁纸一】默认壁纸及默认壁纸组件_第1张图片

    • 该方法用于获取当前设备的默认壁纸,不过暂时不支持默认锁屏壁纸的获取

    • 从代码看有两个地方可以指定默认壁纸

      • 一个是通过PROP_WALLPAPER属性获取,如果系统属性中存在该属性,且该属性的值指向一个文件路径,则认为该文件为默认壁纸。

        • ro.config.wallpaper

        • 该属性可以通过 /build/tools/buildinfo.sh在编译时指定,属性将会以上述顺序加载。后加载的属性将覆盖原先的值。

      • 如果属性不存在则加载系统预置的壁纸资源

        • 该资源在/framework/base/res/res/drawable/default_wallpaper.png; 该资源被打包在framework-res.apk里

        • 对应的资源id为com.android.internal.R.drawable.default_wallpaper;

  • 默认壁纸组件(服务)

    • 壁纸组件是一个继承了WallpaperService的服务,用于执行壁纸的绘制,默认壁纸组件即系统默认的用于绘制壁纸的服务,一般来说是指ImageWallpaper,但是系统为什么会将该ImageWallpaper设为默认的壁纸服务呢?该部分是由以下的方式来指定的。

    • WallpaperManager的getDefaultWallpaperComponent用于返回当前系统指定的默认壁纸组件,该方法在WallpaperManagerService中被调用,用于在没有壁纸组件时加载默认的壁纸组件。

      • 【Android笔记】【壁纸一】默认壁纸及默认壁纸组件_第2张图片

      • 该方法中获取默认的壁纸服务,主要通过两处指定:

        • 一个是PROP_WALLPAPER_COMPONENT,该属性键为ro.config.wallpaper_component,该属性可以通过 /build/tools/buildinfo.sh在编译时指定。

        • 如果上述属性没有指定,则在framework-res.apk,查找是否有字符串资源default_wallpaper_component,如果有,则尝试使用该字符串来获取ComponentName。framework-res内的资源在/framework/base/res/res内指定。这点与上述默认壁纸是一样的。

 

 

 

你可能感兴趣的:(壁纸,Android,壁纸)