Android怎么实现动态壁纸
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍了Android怎么实现动态壁纸的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现动态壁纸文章都会有所收获,下面我们一起来看看吧。一、概
千家信息网最后更新 2024年09月22日Android怎么实现动态壁纸
这篇文章主要介绍了Android怎么实现动态壁纸的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现动态壁纸文章都会有所收获,下面我们一起来看看吧。
一、概述:
壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService。当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘制工作。
Engine是WallpaperService中的一个内部类,实现了壁纸窗口的创建以及Surface的维护工作。Engine内部实现了SurfaceView,我们只需要在其内部利用MediaPlayer + SurfaceView就可以播放动态壁纸了。
二、实现:
WallpaperService需要一个xml去配置,然后在AndroidManifest.xml中声明
继承WallpaperService实现我们自己的壁纸服务VideoLiveWallpaper
public class VideoLiveWallpaper extends WallpaperService { @Override public Engine onCreateEngine() { return new VideoEngine(); } class VideoEngine extends Engine { private MediaPlayer mMediaPlayer; @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onSurfaceCreated(SurfaceHolder holder) { super.onSurfaceCreated(holder); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setSurface(holder.getSurface()); try { mMediaPlayer.setDataSource(new File(FileUtil.getDCIMCameraDir(), "hlj_wallpaper").getAbsolutePath()); mMediaPlayer.setLooping(true); mMediaPlayer.setVolume(0, 0); mMediaPlayer.prepare(); mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mMediaPlayer.start(); } }); } catch (IOException e) { e.printStackTrace(); } } @Override public void onSurfaceDestroyed(SurfaceHolder holder) { super.onSurfaceDestroyed(holder); mMediaPlayer.release(); mMediaPlayer = null; } @Override public void onVisibilityChanged(boolean visible) { if (visible) { mMediaPlayer.start(); } else { mMediaPlayer.pause(); } } }}
接着声明这个服务同时声明我们上面写的xml配置
重点在onSurfaceCreated方法中,这里为了可以动态切换不同的壁纸,我是指定去加载一个固定目录下的视频文件,然后不断的复制新文件到这个目录,因为一旦开启切换壁纸这个方法就会调用,所以当调用后再动态通知去更改路径不起作用。
所以我在更换壁纸前先清空
try { WallpaperManager.getInstance(getContext()) .clear(); } catch (IOException e) { e.printStackTrace(); }
再去复制需要替换的壁纸到指定目录
copyFile(file.getAbsolutePath(), new File(FileUtil.getDCIMCameraDir(), "hlj_wallpaper").getAbsolutePath()); /** * 复制单个文件 * * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt * @return boolean */ public void copyFile(final String oldPath, final String newPath) { progressBar.setVisibility(View.VISIBLE); Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber super Boolean> subscriber) { try { int byteSum = 0; int byteRead ; File oldFile = new File(oldPath); if (oldFile.exists()) { //文件存在时 InputStream inStream = new FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; while ((byteRead = inStream.read(buffer)) != -1) { byteSum += byteRead; //字节数 文件大小 System.out.println(byteSum); fs.write(buffer, 0, byteRead); } inStream.close(); subscriber.onNext(true); subscriber.onCompleted(); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); subscriber.onCompleted(); } } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer () { @Override public void onCompleted() { progressBar.setVisibility(View.GONE); } @Override public void onError(Throwable e) { progressBar.setVisibility(View.GONE); } @Override public void onNext(Boolean aBoolean) { progressBar.setVisibility(View.GONE); setToWallPaper(getContext()); } }); }
setToWallPaper方法就是真正的开启设置壁纸操作了
public static void setToWallPaper(Context context) { final Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(context, VideoLiveWallpaper.class)); context.startActivity(intent); }
关于"Android怎么实现动态壁纸"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Android怎么实现动态壁纸"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
壁纸
文件
动态
服务
方法
目录
知识
路径
内容
单个
篇文章
切换
工作
配置
不同
不断
之中
价值
作用
同时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微软数据库在海里
超威服务器管理口地址
中卫网络安全局
服务器时间变快
联想服务器连上显示器黑屏
群发软件开发步骤
互联网领先科技成果已征集结束
选修数据库技术及应用难不难
腾讯软件开发人员绩效指标
用服务器管理智能家电
计算机网络技术就业政策是什么
服务器保存微信聊天内容
安徽服务器机柜咨询
服务器 报废 年限
计算机网络技术技能举例分析
连接两个数据库表并去除相同字段
办公室怎么做好网络安全
网络安全管理员配备要求
如何查数据库的定时任务
网络安全法65条内容
甲烷排放量数据库
婚姻软件开发
网络安全法 合规风险
数据库两个表的两个共同字段关联
服务器保存微信聊天内容
网络安全法 最新司法解释
网络安全 模型
决胜高考网络技术类
nmap网络安全扫描
网络技术支持中心网址