热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android编程之天气预报小实例源码演示及效果展示--1

很多时候我们外出,但是由于没有掌握出行的天气情况,经常遇到苦恼的事情,成为落汤鸡,今天我就带大家写一款关于天气预报的AndroidAPP,我会很详细的把它分成几个部分来详细讲解,希望大家喜欢的可以

很多时候我们外出,但是由于没有掌握出行的天气情况,经常遇到苦恼的事情,成为落汤鸡,今天我就带大家写

一款关于天气预报的Android APP,我会很详细的把它分成几个部分来详细讲解,希望大家喜欢的可以顶一个,

也同时呢,希望更多的人加入到我的博客中来,一起学习,一起交流,一起进步,谢谢大家!


写完天气预报之后有空闲时间的话会讲文件管理器和其他实用的一些APP开发,方便大家学习,交流


在开发天气预报之前,首先要准备一个获取天气信息的API key ,在这里,笔者向大家推荐一个网址,比较实用

key 申请地址:http://www.wunderground.com

得到 key 之后我们就可以开始我们的开发了,为了使我们的界面看起来更加精简和美观,我用到了 android.support.v4.jar 第三方库 picasso-2.2.0.jar,没有的童鞋可以到 http://download.csdn.net/detail/jspping/8084689 自行下载


下载完之后将他们导入到项目libs文件夹,没有的可以自己新建一个libs,创建好新的 Android Project之后,接下来就开始我们的编程吧,首先我们要在清单文件XML里面给我们的 application 添加对应的权限,我们这里需要用到的是 网络访问,网络状态,GPS权限等,配置清单如下:

    





权限配置好了,就开始编程了,笔者在这里给 application 添加了一个欢迎的 Animation,为的是给用户更友好的体验,下面看看代码:

package com.newer.myweather;
/**
* Animation 欢迎动画
* @author Engineer-Jsp
* @date 2014.10.27
* */
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.AlphaAnimation;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SplashActivity extends Activity {

private TextView versionNumber;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);

mLinearLayout = (LinearLayout) findViewById(R.id.LinearLayout01);
versiOnNumber= (TextView) findViewById(R.id.versionNumber);
versionNumber.setText(getVersion());

if (isNetWorkConnected()) {
AlphaAnimation aa = new AlphaAnimation(0.5f, 1.0f);
aa.setDuration(2000);
mLinearLayout.setAnimation(aa);
mLinearLayout.startAnimation(aa);
// 动画线程,与跳转延迟设置,我这里是设置了3000ms,即3秒钟
new Handler().postDelayed(new Runnable() {

@Override
public void run() {
// 启动天气服务
Intent service = new Intent(SplashActivity.this,
WeatherService.class);
startService(service);
finish();
// 欢迎动画完毕跳转至主活动
Intent intent = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(intent);
}
}, 3000);
} else {
showSetNetworkDialog();
}

}
// 弹出网络状态窗口
private void showSetNetworkDialog() {
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("设置网络");
builder.setMessage("网络错误请检查网络状态");
builder.setPositiveButton("设置网络", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
// 判断手机系统的版本 即API大于10 就是3.0或以上版本
if (android.os.Build.VERSION.SDK_INT > 10) {
intent = new Intent(
android.provider.Settings.ACTION_WIRELESS_SETTINGS);
} else {
intent = new Intent();
ComponentName compOnent= new ComponentName(
"com.android.settings",
"com.android.settings.WirelessSettings");
intent.setComponent(component);
intent.setAction("android.intent.action.VIEW");
}
startActivity(intent);
finish();
}
});
builder.setNegativeButton("取消", new OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.create().show();
}
// 网络状态情况
private boolean isNetWorkConnected() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
// 取版本号
private String getVersion() {
try {
PackageInfo info = getPackageManager().getPackageInfo(
getPackageName(), 0);
return "Version " + info.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
return "Version";
}
}

}

加载的splash.xml 代码:

    android:id="@+id/LinearLayout01"
android:layout_
android:layout_
android:background="@drawable/home_gradiend"
android:gravity="center"
android:orientation="vertical" >

android:id="@+id/logo"
android:layout_
android:layout_
android:layout_marginTop="60dip"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:scaleType="centerInside"
android:src="@drawable/logo" >


android:layout_
android:layout_
android:layout_marginTop="20dip"
android:gravity="bottom"
android:shadowColor="#FFFFFF"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:text="@string/app_name"
android:textColor="#444444"
android:textSize="35dip"
android:typeface="serif" >


android:layout_
android:layout_
android:layout_marginTop="20dip"
android:gravity="bottom"
android:shadowColor="#FFFFFF"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:text="(天气预报客户端)"
android:textColor="#444444"
android:textSize="25dip"
android:typeface="serif" >


android:id="@+id/versionNumber"
android:layout_
android:layout_
android:layout_marginTop="20dip"
android:gravity="bottom"
android:shadowColor="#FFFFFF"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:text="版本号"
android:textColor="#444444"
android:textSize="20dip"
android:typeface="serif" >



欢迎界面效果图展示:


在进入活动和服务之前,会对用户的当前网络状态进行判断,如果用户当前网络状态不好,或者没网络,会弹出网络设置界面,供用户选择,如果网络没为题,在播放完此动画之后,会启动一个意图开启服务,跳转至主活动

下一篇将讲解服务和主活动的使用,这篇内容就这些,知识不是很多,好好消化下,咱们下篇接着说


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
长沙祛疤--欣奕除疤_998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有