android 动态换启动背景

##介绍

  • 动态换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

转载于:https://my.oschina.net/u/734793/blog/686536

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值