当前位置:操作系统 > 安卓/Android >>

android动态壁纸调用

动态壁纸的实现其实就是在Activity中调用动态壁纸服务,通过绑定服务得到IWall易做图Service,调用该接口中的attach函数实现壁纸的调用。

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

代码中有用到两个接口

IWall易做图Service mService;

IWall易做图Engine mEngine;

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

inte易做图ce IWall易做图Connection {

    void attachEngine(IWall易做图Engine engine);

    ParcelFileDescriptor setWall易做图(String name);

}

oneway inte易做图ce IWall易做图Service {

    void attach(IWall易做图Connection connection,

            IBinder windowToken, int windowType, boolean isPreview,

            int reqWidth, int reqHeight);

}


oneway inte易做图ce IWall易做图Engine {

    void setDesiredSize(int width, int height);

    void setVisibility(boolean visible);

    void dispatchPointer(in MotionEvent event);

    void dispatchWall易做图Command(String action, int x, int y,            int z, in Bundle extras);

    void destroy();

}

 


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

private Wall易做图Manager mWall易做图Manager = null;


private Wall易做图Info mWall易做图Info = null;


private Wall易做图Connection mWall易做图Connection = null;


private Intent mWall易做图Intent;

 


初始化这些变量

mWall易做图Manager = Wall易做图Manager.getInstance(this);

mWall易做图Info = mWall易做图Manager.getWall易做图Info();//如果返回null则说明当前不是动态壁纸

mWall易做图Intent = new Intent(Wall易做图Service.SERVICE_INTERFACE);

mWall易做图Intent.setClassName(mWall易做图Info.getPackageName(), mWall易做图Info.getServiceName());

 


绑定动态壁纸服务

bindService(mIntent, this, Context.BIND_AUTO_CREATE);

IWall易做图Service mService;//这里有一个adil接口

在连接监听中试着attach


public void onServiceConnected(ComponentName name, IBinder service) {

                mService = IWall易做图Service.Stub.asInte易做图ce(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 wall易做图; clearing", e);


                }


        }

 


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

 

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,