手机壁纸设置相关


framework 服务

frameworks\base\core\java\android\app\IWallpaperManager.aidl

与设置获取墙纸相关的服务端接口


frameworks\base\core\java\android\app\IWallpaperManagerCallback.aidl

oneway interface IWallpaperManagerCallback {
    /**
     * Called when the wallpaper has changed
     */
    void onWallpaperChanged();
}

当服务端墙纸内容准备好,准备显示时,会回调onWallpaperChanged通知客户端。


frameworks\base\core\java\android\app\WallpaperManager.java

墙纸服务管理类,其内部类

static class Globals extends IWallpaperManagerCallback.Stub {
    private IWallpaperManager mService;
    private Bitmap mCachedWallpaper;
    private int mCachedWallpaperUserId;
    private Bitmap mDefaultWallpaper;

    Globals(Looper looper) {
        IBinder b = ServiceManager.getService(Context.WALLPAPER_SERVICE);
        mService = IWallpaperManager.Stub.asInterface(b);
        forgetLoadedWallpaper();
    }

// Private completion callback for setWallpaper() synchronization
private class WallpaperSetCompletion extends IWallpaperManagerCallback.Stub {
    final CountDownLatch mLatch;

    public WallpaperSetCompletion() {
        mLatch = new CountDownLatch(1);
    }

内部类Globals 获取墙纸服务,并实现客户端回调接口

内部类WallpaperSetCompletion 用于服务内部使用,设置墙纸完成回调。


frameworks\base\services\core\java\com\android\server\wallpaper\WallpaperManagerService.java

public class WallpaperManagerService extends IWallpaperManager.Stub {
    static final String TAG = "WallpaperManagerService";
    static final boolean DEBUG = false;

    public static class Lifecycle extends SystemService {
        private WallpaperManagerService mService;

        public Lifecycle(Context context) {
            super(context);
        }

        @Override
        public void onStart() {
            mService = new WallpaperManagerService(getContext());
            publishBinderService(Context.WALLPAPER_SERVICE, mService);
        }

实现墙纸服务客户端,并发布服务


应用端

frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\LockscreenWallpaper.java

public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implements Runnable {

    private static final String TAG = "LockscreenWallpaper";

    private final PhoneStatusBar mBar;
    private final WallpaperManager mWallpaperManager;
    private final Handler mH;

    private boolean mCached;
    private Bitmap mCache;
    private int mCurrentUserId;
    // The user selected in the UI, or null if no user is selected or UI doesn't support selecting
    // users.
    private UserHandle mSelectedUser;
    private AsyncTask<Void, Void, LoaderResult> mLoader;

    public LockscreenWallpaper(Context ctx, PhoneStatusBar bar, Handler h) {
        mBar = bar;
        mH = h;
        mWallpaperManager = (WallpaperManager) ctx.getSystemService(Context.WALLPAPER_SERVICE);
        mCurrentUserId = ActivityManager.getCurrentUser();

        IWallpaperManager service = IWallpaperManager.Stub.asInterface(
                ServiceManager.getService(Context.WALLPAPER_SERVICE));
        try {
            service.setLockWallpaperCallback(this);
        } catch (RemoteException e) {
            Log.e(TAG, "System dead?" + e);
        }
    }

锁屏墙纸实现了 onWallpaperChanged接口并继承runnable ,这样当壁纸准备好可以显示时就会调用该接口,而该接口将该类post 到主线程,从而执行该类中run 函数。当加载完壁纸,这更新状态栏,mBar.updateMediaMetaData。


frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBar.java

if (ENABLE_LOCKSCREEN_WALLPAPER) {
    mLockscreenWallpaper = new LockscreenWallpaper(mContext, this, mHandler);
}


桌面背景壁纸服务类

frameworks\base\core\java\android\service\wallpaper\WallpaperService.java



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值