##介绍
- 动态换APP启动背景图片,没有想象中那么困难,实现方式无非就二种(如果有第三种愿洗耳恭听),要么服务器主动推、要么APP主动请求,那问题来了,服务器推什么?APP请求什么?这个问题就千变万化咯,但万变不离其宗,就是定义更新背景格式不一样而已嘛!
- 假设明天是 5-4日 青年节,服务器配置一张带有活力4射的2B青年背景图片,那么APP启动检查下载保存更换默认背景OK搞定。
- 下面介绍第二种APP主动请求的方式,只供借鉴。大概步骤是酱紫的。。。。。。
###步骤一
- APP在每次启动都请求背景 API ,由服务器判断是否需要更新,更新返回 JSON 或 xml 格式 coverUpdate 用于控制是否更换背景图片 coverStartDate 图片有效启始时间 coverEndDate 图片有效结束时间 coverURL 图片Url地址
####更新背景格式
{
"code": "0",
"object": {
coverUpdate: true,
coverStartDate: "2014-04-29",
coverEndDate: "2014-04-29",
coverURL: "http://www.xxxxx.com.cn:9011/YD/wellcomeImage.png"
}
}
####不更新格式
{
"code": "-1",
}
###步骤二
- APP解析格式并保存至本地,把图片重命名为,开始有效时间与结束有效时间,用于更换背景时,检查图片有效时间 ,也可以服务器来处理图片名称。
- 至于为什么要把图片名称命名为时间格式,是因为服务器返回的 JSON 格式我这里并没有缓存在本地,只下载并保存了图片。
- 你也可以把JSON缓存在本地,更换图片时,直接拿有效时间来检查。
private void parseBackGround(String strJson) throws IOException {
WellcomeImage update = WellcomeImage.parse(strJson);
// 获取背景保存目录
String fileDir = FileUtil.getAppCache(mContext, "wellcomeback");
if (update == null) return;
// 如果没有图片的链接地址则返回
if (StrUtil.strIsEmpty(update.coverUrl)) return;
// 是否需要更新背景
if (update.coverUpdate) {
final String downloadUrl = update.coverUrl;// 背景地址
// 文件名:有效开时间与结束时间 fileName:20140429-20140429
final String fileName = update.coverStartDate.replace("-", "") + "-" +
update.coverEndDate.replace("-", "");
// 获取一个文件夹下的所有文件
List<File> files = FileUtil.listPathFiles(fileDir);
// 如果文件名一至, 则不下载图片
if (!files.isEmpty() && files.get(0).getName().equalsIgnoreCase(fileName)) return;
// 下载背景图片
HttpUtils httpUtils = new HttpUtils();
httpUtils.download(downloadUrl, fileDir + fileName + ".png", null);
} else {
FileUtil.clearFileWithPath(fileDir); // 清空背景文件夹
}
}
###步骤三
- 更换背景,取出图片把文件名拆分,开始时间与结束,用当天的时间作为比较。在有效时间内则更换背景,否则还原默认。
/**
* 检查是否需要换图片
*
* @param view
*/
private void checkBackground(View view) {
final String path = FileUtil.getAppCache(this, "wellcomeback");
final List<File> files = FileUtil.listPathFiles(path);
if (!files.isEmpty()) {
File file = files.get(0);
// 分割文件名是开始时间与结束时间
long time[] = getTime(file.getName());
long today = StrUtil.getToday();
// 比较最后一张背景是否在有效时间范围内
if (today >= time[0] && today <= time[1]) {
view.setBackgroundDrawable(Drawable.createFromPath(file.getAbsolutePath()));
return;
}
}
view.setBackgroundResource(R.drawable.flashwin_bkg);// 还原背景
}
/**
* 分析显示的时间
*
* @param timeFileName
* @return
*/
private long[] getTime(String timeFileName) {
long timeLongs[] = new long[2];
try {
timeFileName = timeFileName.substring(0, timeFileName.indexOf("."));// 只截取名件名
String times[] = timeFileName.split("-");// 分割成开始时间与结束时间
timeLongs[0] = Long.parseLong(times[0]);// 开始时间
if (times.length >= 2) {// 如果分割后的时间组大于等2,都只取组下标为1的
timeLongs[1] = Long.parseLong(times[1]);// 结束时间
} else {
timeLongs[1] = Long.parseLong(times[0]);
}
} catch (Exception e) {
}
return timeLongs;
}
QQ交流群:435173211