安卓壁纸服务(动态壁纸)使用与源码分析

本文介绍了安卓动态壁纸的使用方法和源码分析。动态壁纸属于SystemUI的一部分,服务优先级高,不易被系统杀死。创建自定义WallpaperService并注册到Manifest,通过WallpaperManagerService管理静态和动态壁纸。源码分析中详细阐述了壁纸服务的组件结构,包括WallpaperManagerService、WallpaperService及其Engine类,以及壁纸的启动、切换机制。
摘要由CSDN通过智能技术生成

概览

安卓的动态壁纸可以归属到SystemUI中,是SystemUI管理的一部分,安卓支持静态壁纸,同时也支持动态壁纸(added in API level 7 )
用户可以从设备的内部或者是外部存储中选择一个图片资源来作为静态壁纸,此外也可以设置壁纸跟随时间的变化进行一些变化(例如切换不同的图片资源),这也是安卓的特色功能之一。
需要说明的是当某个应用通过系统的接口设置为壁纸应用后,会启动一个壁纸服务,该服务的优先级很高,从某种程度上来说是不会被系统主动杀死的(但是可以被手动停止)。

使用方法

安卓的动态壁纸得益于谷歌官方的包装,使用起来并不复杂具体操作如下

  1. 创建自定义WallpaperService继承WallpaperService
class SampleWallpaperService : WallpaperService() {
   
	override fun onCreateEngine(): Engine {
   
		return SampleEngine()
	}

	inner class SampleEngine : Engine() {
   
	}
}
  1. 在Manifest中注册该Service并添加相关属性
<service android:name="com.qihoo360.mobilesafe.sample.SampleWallpaperService"
	android:enabled="true"
	android:permission="android.permission.BIND_WALLPAPER">
	<intent-filter>
		<action android:name="android.service.wallpaper.WallpaperService" />
	</intent-filter>

	<meta-data
		android:name="android.service.wallpaper"
		android:resource="@xml/sample_resource" />
</service>
  1. 创建必要的xml文件
    需要定义好在manifest里声明好的数据文件sample_resource
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:contextDescription="@string/uri_des"
    android:contextUri="@string/app_uri"
    android:description="@string/wallpaper_description"
    android:author="@string/wallpaper_author"
    android:settingsActivity="com.qihoo360.mobilesafe.mywallapplication.SetupActivity"
    android:showMetadataInPreview="true"
    android:thumbnail="@mipmap/ic_launcher" />

4.调用系统设置接口

fun setDynamicWallPaper(context: Context) {
   
	val intent = Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER)
	intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,ComponentName(context, SampleWallpaperService::class.java))
	context.startActivity(intent)
	}

关于壁纸展示部分的代码见源码。

源码分析

从用户使用的角度来说,可以把壁纸资源分成两类:

  • 静态壁纸
    例如jpg、png等类型的图片,用户可以直接把他们设置为壁纸
  • APK应用程序
    另外一类的壁纸依赖于一个独立的APP,用户需要安装后才能使用(动态壁纸通常就是通过这种手段实现的)。不过这也不意味着静态的图片就不依赖APP的支持,只不过前者借助于系统内置的应用就可以直接设置,而后者的丰富性与多样性则依赖额外的APP来实现。
    不过无论是内部的应用还是自行开发的应用都需要遵循Android系统的壁纸机制才能正常工作,系统的壁纸管理系统主要由以下几个部分组成。
  • WallpaperManagerService(WPMS)
    它是壁纸机制的“大总管”,静态、动态的壁纸都是通过它进行统一的调度
  • WallpaperService(WPS)
    WPS继承了标准的Service组件,所以它一定也会实现onCreate、onDestroy、onBind等一些列方法。此外它还包含了一个重要的嵌套类Engine,后面做详细展开。WPS是静态、动态壁纸的基类,代表了作为“壁纸”所应具有的一切属性。
  • ImageWallpaper(IWP)
    从名称可以看出,它是静态壁纸的实现类,而且继承了上面的WPS。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值