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

时间:2023-11-17 05:43:28 

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

代码中有用到两个接口

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);
                }
        }

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

标签:动态,壁纸,调用
0
投稿

猜你喜欢

  • SpringBoot定时任务动态扩展ScheduledTaskRegistrar详解

    2023-04-23 08:44:06
  • Android自定义图片选择器简单版

    2022-05-11 02:38:59
  • 聚星C#数字信号处理工具包频谱分析的用法

    2022-08-30 11:06:39
  • java HashMap通过value反查key的代码示例

    2022-06-07 08:50:55
  • FragmentStatePagerAdapter保存恢复下拉刷新Fragment内存数据

    2023-07-17 20:36:40
  • Java类的定义以及执行顺序学习教程

    2023-01-14 10:44:29
  • Android Fragment实现底部通知栏

    2023-12-25 21:01:33
  • uploadify java实现多文件上传和预览

    2022-12-25 07:07:16
  • Java设计模式之抽象工厂模式

    2022-05-30 12:45:16
  • ListView的View回收引起的checkbox状态改变监听等问题解决方案

    2023-07-26 17:33:45
  • Android通知栏前台服务的实现

    2022-10-13 22:57:46
  • Android编程开发之Spinner组件用法

    2022-09-02 17:55:26
  • C#创建Windows服务与服务的安装、卸载

    2022-12-25 00:46:58
  • Springboot整合MybatisPlus的实现过程解析

    2021-06-14 02:47:06
  • c#实现万年历示例分享 万年历农历查询

    2022-11-08 23:26:57
  • 解析C# 程序结构

    2021-11-15 05:22:59
  • C#高级静态语言效率利器之泛型详解

    2023-01-24 09:18:02
  • SpringBoot如何根据用户系统时区动态展示时间

    2021-09-23 23:37:10
  • Java设计模式之原型模式详解

    2021-09-06 19:04:49
  • java多线程编程实例

    2022-12-08 18:51:29
  • asp之家 软件编程 m.aspxhome.com