酷乐天气开发记录总结6
后台自动更新天气
新建一个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.显示出全国所有的省.市.县: 2 ...
- 酷乐天气开发记录总结5
切换城市和手动更新天气 首先在布局文件中加入切换城市和更新天气的按钮,修改weather_layout.xml中的代码: <Buttonandroid:id="@+id/switch_ ...
- 酷乐天气开发记录总结3
与服务器的交互 新建HttpUtil类,代码如下: public class HttpUtil {publicstatic void sendHttpRequest(final String addr ...
- 酷乐天气开发记录总结2
创建数据库和表 数据库设计: 建立三张表:Province.city.county 1.province Id:自增主键 Province_name:省级名称 Province_code:省级代码 2 ...
- 酷乐天气开发记录总结4
遍历全国省市县数据 新建布局choose_area.xml文件 <LinearLayoutxmlns:android="http://schemas.android.com/apk/r ...
- 酷乐天气开发总结记录7
酷乐天气的开发已经高一段落了,接下来就是修改图标,并对apk文件进行签名.在此不做说明了. 经过这一段时间的开发练习,我的收获如下: 1.会使用天气等类型的API 2.能够熟练得解析JSON数据,发送 ...
- Android酷欧天气实训报告书,萌新求助,第一行代码酷欧天气开发,遇到coolweather keeps s...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 现在贴上整个logcat中的错误以及程序截图: 错误如下:09-01 11:01:55.619 3833-3833/? E/AndroidRuntime: ...
- 【Electron】酷家乐客户端开发实践分享 — 下载管理器
作者:钟离,酷家乐PC客户端负责人 原文地址:webfe.kujiale.com/electron-ku- 酷家乐客户端:下载地址 www.kujiale.com/activity/13- 文章背景: ...
- 14、进入实战——开发酷欧天气
我们将要在本章编写一个功能较为完整的天气预报程序,学习了这么久的Android开发,我们给这个软件起个名字叫酷欧天气,英文名叫作Cool Weather.下面就可以开始动手了. 14.1 功能需求及技 ...
最新文章
- dbForge Studio 2020 for MySQL中文版
- oracle 修改表
- DRF—Mixin拓展类、视图集
- 三基站定位几何精度因子的简便运算
- Composer The openssl extension is required for SSL/TLS protection
- Tableau研学小课堂(part3)--Tableau数据可视化
- 支付宝信用分数678高么?
- Python中正则表达式讲解
- Navicat for MySQL数据库管理工具
- Http\Https\Socket
- 对设计领域中Tile和Card的理解
- Easyui的numberbox无法输入以0开头的数字编号(转载)
- cam350菜单怎么切换成中文_CAM350菜单中文详解
- Mac系统使用idea常用快捷键
- 高二获全奖跳级进哈佛,29岁坐拥数亿身家,这位曾让马云畏惧的“天才神童”现在怎么样了?...
- 在Firemonkey中实现ListView
- js购物车选中商品实现计算商品总价格
- c语言中front是什么,front用法,关于front的用法
- ElasticSearch-7.5.1集群3master-3data-3client环境搭建
- 微信小程序--优购商城项目(4)