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>

  • 相关阅读:
    WampServer Mysql配置
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 前10名
  • 原文地址:https://www.cnblogs.com/lemonhome/p/4492643.html
Copyright © 2011-2022 走看看