zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android动态壁纸调用的简单实例

Android实例 简单 动态 调用 壁纸
2023-06-13 09:15:00 时间

调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明的则什么也看不到。

代码中有用到两个接口

IWallpaperServicemService;

IWallpaperEnginemEngine;

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

复制代码代码如下:


interfaceIWallpaperConnection{

   voidattachEngine(IWallpaperEngineengine);

   ParcelFileDescriptorsetWallpaper(Stringname);

}

onewayinterfaceIWallpaperService{

   voidattach(IWallpaperConnectionconnection,

           IBinderwindowToken,intwindowType,booleanisPreview,

           intreqWidth,intreqHeight);

}


onewayinterfaceIWallpaperEngine{

   voidsetDesiredSize(intwidth,intheight);

   voidsetVisibility(booleanvisible);

   voiddispatchPointer(inMotionEventevent);

   voiddispatchWallpaperCommand(Stringaction,intx,inty,           intz,inBundleextras);

   voiddestroy();

}

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

复制代码代码如下:

privateWallpaperManagermWallpaperManager=null;

privateWallpaperInfomWallpaperInfo=null;

privateWallpaperConnectionmWallpaperConnection=null;

privateIntentmWallpaperIntent;

初始化这些变量

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

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

mWallpaperIntent=newIntent(WallpaperService.SERVICE_INTERFACE);

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

绑定动态壁纸服务

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

IWallpaperServicemService;//这里有一个adil接口

在连接监听中试着attach

复制代码代码如下:
publicvoidonServiceConnected(ComponentNamename,IBinderservice){

               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(RemoteExceptione){

                   Log.w("","Failedattachingwallpaper;clearing",e);
               }
       }


在bindService的时候发现总是失败,后来发现是权限问题,只有拥有系统权限的apk才可以使用WallpaperService.SERVICE_INTERFACE服务,所以问题就变成了怎么获取系统权限。