1. App的效果

    首先App中的图片就是微软Bing搜索中的壁纸,下一节中我会回答怎么通过获取Bing壁纸。接下来你打开http://cn.bing.com/,来验证一下显示的图片是不是和下图是一样的。

  1. 获取Bing背景图片的链接
    我们查看页面的源代码,可以发现类似下图的代码

我们把地址提取出来 http://s.cn.bing.net/az/hprichbg/rb/FlorenceView_ZH-CN14082192121_1920x1080.jpg,然后我们打开可以看到如下图

这是今天,也就是 2015年7月30号 显示的图片,当你看到这篇博文的时候肯定不是显示这章图片,可能上面的链接也打不开了。我们从链接知道 图片是1920x1080的,这在宽屏显示器上还行,可我们的手机是竖屏的,这可怎么办呢?
用过Winphone的朋友可能都知道,屏幕锁屏界面就是Bing图片,而Winphone就是竖屏的啊,况且笔者手中也有一个lumia手机。于是我碰运气的试了试,把上述链接的尺寸改变了一下,奇迹就发生了。

http://s.cn.bing.net/az/hprichbg/rb/FlorenceView_ZH-CN14082192121_720x1280.jpg

720x1280是目前主流手机的分辨率吧,看下图知道了。

接下来,我们只需要在App中对Bing发出请求,然后用正则分析出原始图片的地址,再把分辨率换成我们想要的就行了。这一切用正则就行了,代码如下:

String string = new String(responseBody, "UTF-8");
String match = "";
String reg = "http:\\/\\/s\\.cn\\.bing\\.net.{10,100}\\.jpg";
Matcher m = Pattern.compile(reg).matcher(string);
while (m.find()) {match = m.group(0);
}
match = match.replace("1920", "720");
match = match.replace("1080", "1280");

3.App每天更换背景的逻辑

当用户启动App的时候,判断是否已经获取了今日的壁纸,如果有,那么设置壁纸为应用背景,否则,获取今日的壁纸,并且设置为今日壁纸

逻辑看起来很简单,分析起来其实挺复杂的,要考虑到一下几个问题:
1:当用户启动App时,手机没有联网
2:如何判断用户已经获取了壁纸

我的处理方法是:
onCreate():设置一个间隔为一分钟的计时器,当没有获取到壁纸,则一直运行下去,获取到壁纸,则取消计时器,并且向sharePreferences写入今日的日期。 然后判断是否已经获取今日壁纸是通过比对用户手机中的日期与sharePreferences中的日期是否一致进行的。

在onCreate()和onResume()中更新壁纸
还有诸多的细节问题,就看源代码吧

核心代码:

//onCreate()
loadBingPic();
timer.scheduleAtFixedRate(new getBingPic(), 5 * 1000, 60 * 1000);//Class getBingPic
public class getBingPic extends TimerTask {public void run() {SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");Date curDate = new Date(System.currentTimeMillis());String today = formatter.format(curDate);if (today.equals(sharedPreferences.getString(TODAY, ""))) {timer.cancel();return;}HttpRequest.get(bingUrl, new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int statusCode, Header[] headers,byte[] responseBody)throws UnsupportedEncodingException {String string = new String(responseBody, "UTF-8");String match = "";String reg = "http:\\/\\/s\\.cn\\.bing\\.net.{10,100}\\.jpg";Matcher m = Pattern.compile(reg).matcher(string);while (m.find()) {match = m.group(0);}match = match.replace("1920", "720");match = match.replace("1080", "1280");HttpRequest.get(match, new AsyncHttpResponseHandler() {public void onSuccess(int statusCode, Header[] headers,byte[] responseBody)throws UnsupportedEncodingException {String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {File sdcardDir = Environment.getExternalStorageDirectory();String path = sdcardDir + "/" + mkDir;File dir = new File(path);if (!dir.exists()) {dir.mkdirs();}SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");Date curDate = new Date(System.currentTimeMillis());String today = formatter.format(curDate);sharedPreferences.edit().putString(TODAY, today).commit();File photo = new File(path, "bing.jpg");if (photo.exists()) {photo.delete();}try {FileOutputStream fos = new FileOutputStream(photo.getPath());fos.write(responseBody);timer.cancel();Message message = new Message();message.what = 1;mHandler.sendMessage(message);fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}public void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error)throws UnsupportedEncodingException {}});}public void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error)throws UnsupportedEncodingException {}});
}
}//loadBingPic()
public void loadBingPic() {System.out.println("loadBingpic()");String str = "";if (!sharedPreferences.getString(TODAY, "").equals(str)) {String photo = Environment.getExternalStorageDirectory().getPath()+ "/" + mkDir + "/bing.jpg";            mainUI.setBackgroundDrawable(Drawable.createFromPath(photo));}}

Android App每日更换壁纸相关推荐

  1. android 10.0 更换壁纸加载慢滑动卡顿的解决

    1.概述 在10.0的系统产品开发中,在产品开发中对于更换壁纸的时候,如果不是标准的分辨率,会出现更换完壁纸后 壁纸被放大的情况,这样就会感觉到壁纸在更换后,Luancher3在滑动 切换WorkSp ...

  2. android每日更新壁纸,最美壁纸app安卓最新版下载 v4.0.9[网盘资源] - 艾薇下载站...

    安卓动态壁纸是一款运行在Android系统上面的精美壁纸软件,使用这款软件能够自定义设置你的独一无二的精美壁纸哦.是不是有的时候总是为找壁纸而烦恼呢?是不是总是找不到自己想要的壁纸呢?没有关系,它,来 ...

  3. 我的Android进阶之旅------gt;Android使用AlarmManager全局定时器实现定时更换壁纸

    该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供 ...

  4. Android开发之自动更换壁纸

    本程序主要实现了: 1.使用AssetManager将assets目录中的文件复制到SD卡的指定位置 2.使用AlarmManager全局定时器,周期性的启动指定组件切换壁纸 3.使用SharedPr ...

  5. android 通过service 执行AlarmManager 自动更换壁纸

    自动更换壁纸是通过服务在后台进行的,所以 新建一个类继承service服务 先附上详细的解析代码: package com.example.changebz; import java.io.IOExc ...

  6. 我的Android进阶之旅------Android使用AlarmManager全局定时器实现定时更换壁纸

    该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供 ...

  7. android 自动更换壁纸,安卓壁纸如何设置自动更换壁纸-手机天堂

    安卓壁纸是一款非常实用的手机壁纸更换软件,平台中有非常丰富的静态壁纸和视频动态壁纸,可以说是每天换一张都不会重样的,这就让手机变的更加的丰富多彩.相信有不少的朋友会认为老使用一张壁纸太单调,每天都换成 ...

  8. Android 更换壁纸 代码

    更换壁纸 通过代码: 步骤: 1,添加权限: <uses-permission android:name="android.permission.SET_WALLPAPER" ...

  9. 用python每日更换“必应图片”为“桌面壁纸”

    不少同学都知道,必应每天都会更新壁纸,都十分漂亮,有时候还十分惊艳,同时还会根据每个地区的特色应用不同的壁纸. 那么,如何让自己的电脑每天同步必应每日图片作为桌面背景呢? 下面用python脚本抓取必 ...

最新文章

  1. 登顶CLUE榜单,腾讯云小微与腾讯AI Lab联合团队提出基于知识的中文预训练模型...
  2. 优酷土豆:财报不是问题!
  3. linux 蓝牙编程,实战Linux Bluetooth编程(三) HCI层编程
  4. 【Linux】一步一步学Linux——dpkg-split命令(274)
  5. 利用Java调用openSMILE批量处理音频文件
  6. day21 java的数字类
  7. mvn exec: java_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(下)
  8. transact-sql_如何使用Transact-SQL创建,配置和删除SQL Server链接服务器
  9. python 异常 模块 包
  10. bzoj 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(DP)
  11. Log4J2 靶场漏洞复现
  12. python批量创建文件与批量创建文件夹
  13. Python网络爬虫(二):小说下载器
  14. Datagrid Bind DropDownlist.....
  15. 计算机无法识别 此硬盘,如果计算机无法识别硬盘驱动器,该怎么办?
  16. 关于uIP的移植以及部分特性解析和勘误
  17. jQuery手风琴特效
  18. 雪峰磁针石博客]渗透测试简介2入侵工具
  19. vue-color-picker-sheldon使用说明(一款基于Vue的取色器/颜色选择器)
  20. 让学习成为生活的一部分--彭小六

热门文章

  1. Python读取并处理输出Excel表格(xlsx、xls表格)时,保持原格式不变
  2. fevsix的数据库联系
  3. 某程序员毕业进UC,被阿里收购!跳去优酷土豆,又被阿里收购!再跳去饿了么,还被阿里收购!难道阿里想收购的是他?! 笑死本人了
  4. 花菁荧光染料Cy3/Cy5/Cy7标记COX-2环氧合酶,Cy3/Cy5/Cy7-Cyclooxygenase-2
  5. fossa网络库_如何升级到Ubuntu 20.04 Focal Fossa
  6. 原生前端三大件实现餐厅经营小游戏
  7. vue 过滤器的使用
  8. shell 为什么不让你在等号附近放空格
  9. Java模板模式(template)
  10. html5微课程制作,用H5做微课的好处,你知道多少?