后台自动更新天气

新建一个AutoUpdateServive继承自Service代码如下:

@OverridepublicIBinder onBind(Intent intent) {returnnull;}@Overridepublicint onStartCommand(Intent intent, int flags, int startId) {newThread(new Runnable() {@Overridepublicvoid run() {updateWeather();}}).start();AlarmManagermanager = (AlarmManager) getSystemService(ALARM_SERVICE);
//               intanHour = 8 * 60 * 60 * 1000; // 这是8小时的毫秒数intanHour = 3 * 1000; // 这是8小时的毫秒数longtriggerAtTime = SystemClock.elapsedRealtime() + anHour;Intenti = new Intent(this, AutoUpdateReceiver.class);PendingIntentpi = PendingIntent.getBroadcast(this, 0, i, 0);manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime, pi);returnsuper.onStartCommand(intent, flags, startId);}/*** 更新天气信息。*/privatevoid updateWeather() {SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(this);StringweatherCode = prefs.getString("weather_code", "");Stringaddress = "http://www.weather.com.cn/data/cityinfo/" + weatherCode +".html";HttpUtil.sendHttpRequest(address,new HttpCallbackListener() {@Overridepublicvoid onFinish(String response) {Log.d("TAG",response);Utility.handleWeatherResponse(AutoUpdateService.this,response);}@Overridepublicvoid onError(Exception e) {e.printStackTrace();}});}

在 onStartCommand()方法中先是开启了一个子线程,然后在子线程中调用updateWeather()方法来更新天气,我们仍然会将服务器返回的天气数据交给 Utility 的handleWeatherResponse()方法去处理, 这样就可以把最新的天气信息存储到SharedPreferences文件中。

http://www.itfriend.cn/user/singwhatiwanna/article/details/100554

创建定时任务,为了保证软件不会消耗过多的流量,这里将时间间隔设置为 8 小时,8小时后就应该执行到 AutoUpdateReceiver的 onReceive()方法中了,在 receiver 包下新建 AutoUpdateReceiver继承自 BroadcastReceiver,代码如下所示:

@Overridepublicvoid onReceive(Context context, Intent intent) {Intenti = new Intent(context, AutoUpdateService.class);context.startService(i);}

这里只是在 onReceive()方法中再次去启动 AutoUpdateService,就可以实现后台定时更

新的功能了。不过,我们还需要在代码某处去激活 AutoUpdateService 这个服务才行。修改

WeatherActivity中的代码,如下所示:

private void showWeather() {SharedPreferencesprefs = PreferenceManager.getDefaultSharedPreferences(this);cityNameText.setText(prefs.getString("city_name", ""));temp1Text.setText(prefs.getString("temp1",""));temp2Text.setText(prefs.getString("temp2",""));weatherDespText.setText(prefs.getString("weather_desp",""));publishText.setText("今天" +prefs.getString("publish_time", "") + "发布");currentDateText.setText(prefs.getString("current_date",""));weatherInfoLayout.setVisibility(View.VISIBLE);cityNameText.setVisibility(View.VISIBLE);Intentintent = new Intent(this, AutoUpdateService.class);startService(intent);}

可以看到,这里在 showWeather()方法的最后加入启动 AutoUpdateService这个服务的代

码,这样只要一旦选中了某个城市并成功更新天气之后,AutoUpdateService就会一直在后台运行,并保证每 8 小时更新一次天气。

在 AndroidManifest.xml 中注册新增的服务和广播接收器,如下所示:

<serviceandroid:name="com.coolweather.app.service.AutoUpdateService"></service>
<receiverandroid:name="com.coolweather.app.receiver.AutoUpdateReceiver"></receiver>

转载于:https://www.cnblogs.com/lemonhome/p/4492643.html

酷乐天气开发记录总结6相关推荐

  1. 酷乐天气开发记录总结1

    目前正在看郭霖大神的书<第一行代码>,很受启发,在此之下自己也尝试着做了一款天气软件--酷乐天气.本软件只限于学习和交流. 首先先确定酷乐天气的功能: 1.显示出全国所有的省.市.县: 2 ...

  2. 酷乐天气开发记录总结5

    切换城市和手动更新天气 首先在布局文件中加入切换城市和更新天气的按钮,修改weather_layout.xml中的代码: <Buttonandroid:id="@+id/switch_ ...

  3. 酷乐天气开发记录总结3

    与服务器的交互 新建HttpUtil类,代码如下: public class HttpUtil {publicstatic void sendHttpRequest(final String addr ...

  4. 酷乐天气开发记录总结2

    创建数据库和表 数据库设计: 建立三张表:Province.city.county 1.province Id:自增主键 Province_name:省级名称 Province_code:省级代码 2 ...

  5. 酷乐天气开发记录总结4

    遍历全国省市县数据 新建布局choose_area.xml文件 <LinearLayoutxmlns:android="http://schemas.android.com/apk/r ...

  6. 酷乐天气开发总结记录7

    酷乐天气的开发已经高一段落了,接下来就是修改图标,并对apk文件进行签名.在此不做说明了. 经过这一段时间的开发练习,我的收获如下: 1.会使用天气等类型的API 2.能够熟练得解析JSON数据,发送 ...

  7. Android酷欧天气实训报告书,萌新求助,第一行代码酷欧天气开发,遇到coolweather keeps s...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 现在贴上整个logcat中的错误以及程序截图: 错误如下:09-01 11:01:55.619 3833-3833/? E/AndroidRuntime: ...

  8. 【Electron】酷家乐客户端开发实践分享 — 下载管理器

    作者:钟离,酷家乐PC客户端负责人 原文地址:webfe.kujiale.com/electron-ku- 酷家乐客户端:下载地址 www.kujiale.com/activity/13- 文章背景: ...

  9. 14、进入实战——开发酷欧天气

    我们将要在本章编写一个功能较为完整的天气预报程序,学习了这么久的Android开发,我们给这个软件起个名字叫酷欧天气,英文名叫作Cool Weather.下面就可以开始动手了. 14.1 功能需求及技 ...

最新文章

  1. dbForge Studio 2020 for MySQL中文版
  2. oracle 修改表
  3. DRF—Mixin拓展类、视图集
  4. 三基站定位几何精度因子的简便运算
  5. Composer The openssl extension is required for SSL/TLS protection
  6. Tableau研学小课堂(part3)--Tableau数据可视化
  7. 支付宝信用分数678高么?
  8. Python中正则表达式讲解
  9. Navicat for MySQL数据库管理工具
  10. Http\Https\Socket
  11. 对设计领域中Tile和Card的理解
  12. Easyui的numberbox无法输入以0开头的数字编号(转载)
  13. cam350菜单怎么切换成中文_CAM350菜单中文详解
  14. Mac系统使用idea常用快捷键
  15. 高二获全奖跳级进哈佛,29岁坐拥数亿身家,这位曾让马云畏惧的“天才神童”现在怎么样了?...
  16. 在Firemonkey中实现ListView
  17. js购物车选中商品实现计算商品总价格
  18. c语言中front是什么,front用法,关于front的用法
  19. ElasticSearch-7.5.1集群3master-3data-3client环境搭建
  20. 微信小程序--优购商城项目(4)

热门文章

  1. api-ms-win-crt-runtime-l1-1-0.dll丢失找不到解决方法
  2. 购物中心促销软文如何写?商场节假日活动文案范例
  3. HTML版图像精灵制作工具
  4. 多媒体制作技术心得体会_学习多媒体课件制作心得体会
  5. hdu 4921 Map(组合计数)
  6. 早绑定,晚绑定和其实现
  7. opengl glsl shader vscode安装插件glsl_canvas 和 shader languagesupportForVS Code
  8. 北京市家庭居室装饰装修工程施工合同
  9. 填坑之路——Hadoop分布式缓存
  10. ETG 标准是如何分布定义的?