android动态壁纸2.2.1,8.2.1启动动态壁纸的方法

启动动态壁纸可以通过调用WallpaperManager.getIWallpaperManager().setWallpaperComponent()方法完成。它接受一个ComponentName类型的参数,用于将希望启动的壁纸的WallpaperService的ComponentName告知WallpaperManagerService。WallpaperManager.getIWallpaperManager()方法返回的是WallpaperManagerService的Bp端。因此setWallpaperComponent()方法的实现位于WallpaperManagerService之中。参考其实现:

**WallpaperManagerService.java-->WallpaperManagerService.setWallpaperComponent()**

```

public void setWallpaperComponent(ComponentNamename) {

// 设置动态壁纸需要调用者拥有一个签名级的系统权限

checkPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT);

synchronized (mLock) {

/* **① 首先从mWallpaperMap中获取壁纸的运行信息WallpaperData。**

WallpaperManagerService支持多用户机制,因此设备上的每一个用户可以设置自己

的壁纸。mWallpaperMap中为每一个用户保存了一个WallpaperData实例,这个实例

中保存了和壁纸运行状态相关的信息。例如WallpaperService的ComponentName,

到WallpaperService的ServiceConnection等。于是当发生用户切换时,

WallpaperManagerService可以从mWallpaperMap中获取新用户的WallpaperData,

并通过保存在其中的ComponentName重新启动该用户所设置的壁纸。因此,

当通过setWallpaperComponent()设置新壁纸时,需要获取当前用户的WallpaperData,

并在随后更新其内容使之保存新壁纸的信息 */

intuserId = UserHandle.getCallingUserId();

WallpaperData wallpaper = mWallpaperMap.get(userId);

......

final long ident = Binder.clearCallingIdentity();

try{

......

// **② 启动新壁纸的WallpaperService**

bindWallpaperComponentLocked(name, false, true, wallpaper, null);

}finally {

Binder.restoreCallingIdentity(ident);

}

}

}

```

>[info] 注意 WallpaperManager.getIWallpaperManager()并没有作为SDK的一部分提供给开发者。因此第三方应用程序是无法进行动态壁纸的设置的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值