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

 更新时间:2013年06月04日 10:28:04   作者:  
动态壁纸的实现其实就是在Activity中调用动态壁纸服务,通过绑定服务得到IWallpaperService,调用该接口中的attach函数实现壁纸的调用。

调用后动态壁纸其实是显示在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服务,所以问题就变成了怎么获取系统权限。

相关文章

  • Android中删除sdcard里文件的命令

    Android中删除sdcard里文件的命令

    这篇文章主要介绍了Android中删除sdcard里文件的命令,本文讲解了删除android模拟器或手机上的sd卡文件的方法,需要的朋友可以参考下
    2015-04-04
  • 深入了解ViewPager2的使用

    深入了解ViewPager2的使用

    这篇文章主要介绍了ViewPager2 使用的相关资料,帮助大家更好的进行Android开发,感兴趣的朋友可以了解下
    2020-12-12
  • android 通知Notification详解及实例代码

    android 通知Notification详解及实例代码

    这篇文章主要介绍了android 通知Notification详解及实例代码的相关资料,需要的朋友可以参考下
    2016-12-12
  • Android使用libgdx实现模拟方向键控制角色移动的方法

    Android使用libgdx实现模拟方向键控制角色移动的方法

    这篇文章主要介绍了Android使用libgdx实现模拟方向键控制角色移动的方法,实例分析了Android中使用libgdx框架实现响应方向键的技巧,适用于Android游戏开发领域,需要的朋友可以参考下
    2015-12-12
  • Android:“万能”Activity重构篇

    Android:“万能”Activity重构篇

    本文主要介绍了mvp以及每一层,以及使用mvp来重构“万能”Activity,其实每一层需要注意的东西还有很多,比如model层是最难写的一层。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Android实现ListView控件的多选和全选功能实例

    Android实现ListView控件的多选和全选功能实例

    这篇文章主要介绍了Android实现ListView控件的多选和全选功能,结合实例形式分析了ListView控件多选及全选功能的布局与功能实现技巧,需要的朋友可以参考下
    2017-07-07
  • Android下如何使用百度地图sdk

    Android下如何使用百度地图sdk

    百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口
    2013-07-07
  • Android编程实现获取所有传感器数据的方法

    Android编程实现获取所有传感器数据的方法

    这篇文章主要介绍了Android编程实现获取所有传感器数据的方法,涉及Android针对传感器Sensor相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • 浅谈Android ANR的信息收集过程

    浅谈Android ANR的信息收集过程

    ANR全称即Application Not Responding,也就是应用程序无响应。这篇文章主要介绍了Android ANR的信息收集过程,感兴趣的同学可以了解一下
    2021-11-11
  • Android EditText实现输入表情

    Android EditText实现输入表情

    editText是TextView的子类,TextView能用的工具EditText都能用,接下来通过实例代码给大家分享Android EditText实现输入表情功能,感兴趣的朋友一起看看吧
    2017-08-08

最新评论