zoukankan      html  css  js  c++  java
  • 酷乐天气开发记录总结6

    后台自动更新天气

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

    @Override
             publicIBinder onBind(Intent intent) {
                       returnnull;
             }
     
             @Override
             publicint onStartCommand(Intent intent, int flags, int startId) {
                       newThread(new Runnable() {
                                @Override
                                publicvoid 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() {
                                @Override
                                publicvoid onFinish(String response) {
                                         Log.d("TAG",response);
                                         Utility.handleWeatherResponse(AutoUpdateService.this,response);
                                }
     
                                @Override
                                publicvoid 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,代码如下所示:

    @Override
             publicvoid 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>

  • 相关阅读:
    Android学习网站(1)
    selenium借助AutoIt识别上传(下载)详解
    Apache部署django项目
    win7 64 安装mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
    前端技术Bootstrap的hello world
    djngo快速实现--使用Bootstrap
    自动化基础普及之selenium是啥?
    Robot Framework自动化测试(四)--- 分层思想
    Robot Framework自动化测试(三)---Selenium API
    Robot Framework自动化测试(二)---元素定位
  • 原文地址:https://www.cnblogs.com/lemonhome/p/4492643.html
Copyright © 2011-2022 走看看