android开发实现动态壁纸

释放双眼,带上耳机,听听看~!

代码中有用到两个接口

IWallpaperService mService;

IWallpaperEngine mEngine;

我们可以看到该目录下面有三个aidl接口,分别是

复制代码 代码如下:
interface IWallpaperConnection {

void attachEngine(IWallpaperEngine engine);

ParcelFileDescriptor setWallpaper(String name);

}

oneway interface IWallpaperService {

void attach(IWallpaperConnection connection,

IBinder windowToken, int windowType, boolean isPreview,

int reqWidth, int reqHeight);

}


oneway interface IWallpaperEngine {

void setDesiredSize(int width, int height);

void setVisibility(boolean visible);

void dispatchPointer(in MotionEvent event);

void dispatchWallpaperCommand(String action, int x, int y, int z, in Bundle extras);

void destroy();

}

 

定义壁纸管理和壁纸信息变量

复制代码 代码如下:
private WallpaperManager mWallpaperManager = null;

private WallpaperInfo mWallpaperInfo = null;

private WallpaperConnection mWallpaperConnection = null;

private Intent mWallpaperIntent;

 

初始化这些变量

复制代码 代码如下:
mWallpaperManager = WallpaperManager.getInstance(this);

mWallpaperInfo = mWallpaperManager.getWallpaperInfo();//如果返回null则说明当前不是动态壁纸

mWallpaperIntent = new Intent(WallpaperService.SERVICE_INTERFACE);

mWallpaperIntent.setClassName(mWallpaperInfo.getPackageName(), mWallpaperInfo.getServiceName());

 

绑定动态壁纸服务

复制代码 代码如下:
bindService(mIntent, this, Context.BIND_AUTO_CREATE);

IWallpaperService mService;//这里有一个adil接口

 

在连接监听中试着attach

复制代码 代码如下:
public void onServiceConnected(ComponentName name, IBinder service) {

mService = IWallpaperService.Stub.asInterface(service);

try {

mService.attach(this, view.getWindowToken(),

// WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY,
WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA,

true, root.getWidth(), root.getHeight());

} catch (RemoteException e) {

Log.w("", "Failed attaching wallpaper; clearing", e);
}
}

 

人已赞赏
Android文章

android 二次打包完成apk多渠道打包的方法

2020-2-18 11:06:55

Android文章

android开发获取apn的状态

2020-2-18 12:55:53

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索