Android天气预报程序(七)

后台自动更新天气

这里我们准备加入后台自动更新天气的功能,这样就可以尽可能地保证用户每次打开软件时看到的都是最新的天气信息


要想实现上述功能,就需要创建一个长期在后台运行的定时任务


首先在service包下新建一个AutoUpdateService继承自Service


public class AutoUpdateService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				updateWeather();
			}
		}).start();
		AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
		int anHour = 8 * 60 * 60 * 1000; // 这是8小时的毫秒数
		/**
		 * SystemClock.elapsedRealtime()方法可以获取到系统开机至今所经历时间的毫秒数
		 */
		long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
		Intent i = new Intent(this, AutoUpdateReceiver.class);
		PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
		// ELAPSED_REALTIME_WAKEUP表示让定时任务的触发时间从系统开机算起,且会唤醒CPU
		manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
		return super.onStartCommand(intent, flags, startId);
	}
	
	/**
	 * 	更新天气信息
	 */
	private void updateWeather() {
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
		String weatherCode = prefs.getString("weather_code", "");
		String address = "http://www.weather.com.cn/data/cityinfo/" + weatherCode + ".html";
		HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
			@Override
			public void onFinish(String response) {
				Utility.handleWeatherResponse(AutoUpdateService.this, response);
			}
			
			@Override
			public void onError(Exception e) {
				e.printStackTrace();
			}
			
		});
	}

}

在onStartCommend()方法中先是开启了一个子线程,然后在子线程中调用updateWeather()方法来更新天气

我们仍然会将服务器返回的天气数据交给Utility的handleWeatherResponse()方法去处理,这样就可以把最新的天气信息存储到SharedPreferences文件中


之后就是创建定时任务的技巧了,为了保证软件不会消耗过多的流量,这里将间隔时间设置为8小时,8小时后就应该执行到AutoUpdateReceiver的onReceive()方法中了


在receiver包下新建AutoUpdateReceiver继承自BroadcastReceiver


public class AutoUpdateReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Intent i = new Intent(context, AutoUpdateService.class);
		context.startService(i);
	}

}

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


不过,我们还需要去激活AutoUpdateService这个服务


修改WeatherActivity中的代码


public class WeatherActivity extends Activity implements OnClickListener {
	
	...
	
	/**
	 * 	从SharedPreference文件中读取存储的天气信息,并显示到界面上
	 */
	private void showWeather() {
		SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
		cityNameText.setText(pref.getString("city_name", ""));
		tem1Text.setText(pref.getString("temp1", ""));
		temp2Text.setText(pref.getString("temp2", ""));
		weatherDespText.setText(pref.getString("weather_desp", ""));
		publishText.setText("今天" + pref.getString("publish_time", "") + "发布");
		currentDateText.setText(pref.getString("current_date", ""));
		weatherInfoLayout.setVisibility(View.VISIBLE);
		cityNameText.setVisibility(View.VISIBLE);
		
		Intent intent = new Intent(this, AutoUpdateService.class);
		startService(intent);
		
	}
	
}

这里在showWeather()方法的最后加入启动AutoUpdateService这个服务的代码,这样只要一旦选中了某个城市并成功更新天气后,AutoUpdateService就会一直在后台运行,并保证每8小时更新一次天气


最后,不要忘了在AndroidManifest.xml中注册新增的服务和广播接收器


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




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android天气预报程序源码可以使用Java语言和Android SDK开发。首先,需要获取天气数据,可以通过调用天气API实现。例如,使用心知天气API获取实时天气数据。然后,需要设计界面,包括一个输入框用于输入城市,一个当前天气状况的展示区域,以及一个未来几天天气预报的列表。可以使用Android布局来构建UI界面。接着,需要编写天气数据处理的逻辑,将获取到的数据进行处理并展示在界面上。可以使用OkHttp或者Retrofit等网络请求库,将数据以JSON格式获取到并解析。最后,需要注意界面和数据的更新,可以考虑使用定时任务或者监听器,实现数据的实时更新以及界面的实时展示。这些步骤完成后,Android天气预报程序就可以实现。当然,在实际开发中还需要注意安全性、用户体验等方面。 ### 回答2: 安卓天气预报程序源码是一种基于安卓系统的程序代码,用于方便用户获取实时天气信息的应用程序。通常这类程序可以获取用户所在地的天气信息,或者用户可以选择其他城市的天气信息,提供天气状况、气温、风力等相关信息。 安卓天气预报程序源码通常可以通过复制和编辑代码实现。在设计安卓天气预报程序源码时,需要按照用户需求和交互实现以下功能: 1.天气预报功能:提供实时掌握当地或其它城市的天气情况,包括当前气温、湿度、降水量、风力等信息。 2.生活指数功能:为用户提供相应的健康生活指导,例如空气质量、体感指数、运动指数等。 3.天气预警功能:提供气象灾害警报信息,方便用户随时掌握气象灾害预警情况。 4.城市搜索功能:实现快速按城市或地区查找天气信息的功能,方便用户及时了解不同城市的气象情况。 在编写安卓天气预报程序源码时,需要使用相关编程语言(如Java、Python等)进行编写。需要调用一些API接口,包括天气预报API、生活指数API、天气预警API等,来实现相应的功能。 在实际的开发中,可以通过引用已有的天气预报相关API,更容易地开发出一款功能齐全的天气预报应用程序,并可以将其作为开源项目进行共享。 总之,安卓天气预报程序源码是一种极具实用性的应用程序,对于日常生活中需要掌握气象信息的用户来说是一个不可或缺的工具,可以大大提高用户的生活质量。 ### 回答3: Android天气预报程序是一种非常有用的应用程序,可以帮助用户及时了解天气情况,及时做好出行和生活。如果你想要开发一个天气预报程序,你需要了解相关的原理和技术,并将其转化为实际代码。下面,我将介绍如何编写一个简单的Android天气预报程序的源代码。 开发工具准备: 在开始阐述Android天气预报程序源码之前,你需要准备以下开发工具: 1. Android Studio 编辑器 2. JDK环境 3. Eclipse 支持Android开发的IDE 天气预报程序的核心所在: 在这个天气预报程序中,你需要做到以下几点: 1. 通过天气API获取最新天气数据 2. 解析JSON格式的数据 3. 将数据显示在应用程序中 下面就来详细讲解一下: 1.通过天气API获取最新天气数据: 在天气预报软件中我们需要从第三方网站获取天气的数据,这个时候我们需要一个可以提供天气数据的API,目前市场上比较常用的天气API包括:OpenWeatherMap API、和风天气API、百度天气API等,我们可以根据自己的需要选择相应的天气API。 在使用API获取最新天气数据时,我们需要注意以下几点: (1)保持网络连接; (2)需要申请API KEY; (3)根据不同的API,所返回的数据格式也可能不同; (4)在获取数据过程中,需要使用异步线程。 2.解析JSON格式的数据: 一旦我们从API获取了最新的天气数据,我们需要将其解析为可读性强的格式以便我们在应用程序中进行显示。在Android应用程序中,我们通常使用Gson、Jackson等第三方库来解析JSON数据。在解析完JSON数据后,我们就可以将数据转化为自己需要的格式,比如与UI相关的实体类或者本地缓存等。 3.将数据显示在应用程序中: 在获取到天气数据并解析为可读性强的格式后,我们就可以开始将其显示在应用程序中。在Android应用程序中显示数据的方式非常多,可以通过ListView、RecyclerView、CardView等控件来进行显示。同时,我们还可以将数据以文字、图表等方式进行展示,以便用户更好地阅读和理解天气情况。 总结: 本文主要介绍了开发一个Android天气预报程序的源码,包括如何获取最新数据、解析JSON格式数据以及将数据显示在应用程序中。当然,以上只是介绍了一些基础的原理和技术,如果你想要真正地做出一个好用的天气预报程序,你还需要学习更深入的知识,同时结合自己的实际需求,进行更加灵活和全面的应用开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值