package com.weather.app;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import com.weather.comp.GPSListAdapter;
import com.weather.comp.MyListAdapter;
import com.weather.dao.DBHelper;
import com.weather.utils.LocationXMLParser;
import com.weather.utils.WeaterInfoParser;
import com.weather.utils.WebAccessTools;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.appwidget.AppWidgetManager;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ListView;
import android.widget.RemoteViews;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ExpandableListView.OnChildClickListener;
/**
*
* @author i-zqluo
* 一个设置城市的Activity
*/
public class SetCityActivity extends Activity {
//定义的一个自动定位的列表
private ListView gpsView;
//定义的一个省份可伸缩性的列表
private ExpandableListView provinceList;
//定义的用于过滤的文本输入框
private TextView filterText;
//定义的一个记录城市码的SharedPreferences文件名
public static final String CITY_CODE_FILE="city_code";
//城市的编码
private String[][] cityCodes;
//省份
private String[] groups;
//对应的城市
private String[][] childs;
//自定义的伸缩列表适配器
private MyListAdapter adapter;
//记录应用程序widget的ID
private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set_city);
gpsView = (ListView)findViewById(R.id.gps_view);
provinceList= (ExpandableListView)findViewById(R.id.provinceList);
//设置自动定位的适配器
gpsView.setAdapter(new GPSListAdapter(SetCityActivity.this));
//==============================GPS=================================
//当单击自动定位时
gpsView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView localeCity = (TextView)view.findViewById(R.id.locateCityText);
localeCity.setText("正在定位...");
final LocateHandler handler = new LocateHandler(localeCity);
//添加一个线程来处理定位
new Thread(){
public void run() {
Map<Integer, String> cityMap= getLocationCityInfo();
//记录匹配的城市的索引
int provinceIndex = -1;
int cityIndex = -1;
//传给处理类的数据封装对象
Bundle bundle = new Bundle();
if(cityMap!=null) {
//得到图家名
String country = cityMap.get(LocationXMLParser.COUNTRYNAME);
//只匹配中国地区的天气
if(country!=null&&country.equals("中国")){
//得到省
String province = cityMap.get(LocationXMLParser.ADMINISTRATIVEAREANAME);
//得到市
String city = cityMap.get(LocationXMLParser.LOCALITYNAME);
//得到区县
String towns = cityMap.get(LocationXMLParser.DEPENDENTLOCALITYNAME);
Log.i("GPS", "============"+province+"."+city+"."+towns+"==============");
//将GPS定位的城市与提供能查天气的城市进行匹配
StringBuilder matchCity = new StringBuilder(city);
matchCity.append(".");
matchCity.append(towns);
//找到省份
for(int i=0; i<groups.length; i++) {
if(groups[i].equals(province)) {
provinceIndex = i;
break;
}
}
//先从区县开始查找匹配的地区
for(int j=0; j<childs[provinceIndex].length; j++) {
if(childs[provinceIndex][j].equals(matchCity.toString())) {
cityIndex = j;
break;
}
}
//如果未匹配成功,则换为从城市中查找
if(cityIndex == -1) {
for(int j=0; j<childs[provinceIndex].length; j++) {
if(childs[provinceIndex][j].equals(city)) {
cityIndex = j;
//匹配成功,则退出循环
break;
}
}
}
}
}
//将其用bundle封装,用于传给Handler
bundle.putInt("provinceIndex", provinceIndex);
bundle.putInt("cityIndex", cityIndex);
Message msg = new Message();
msg.setData(bundle);
//正式交由handler处理
handler.sendMessage(msg);
}
}.start();
}
});
//为过滤输入文本框添加事件
filterText = (TextView) findViewById(R.id.filterField);
filterText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
CharSequence filterContent = filterText.getText();
//设置列表数据过滤结果显示
adapter.getFilter().filter(filterContent);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
//得到MainActivity或Widget传过来的intent
Intent intent =getIntent();
//通过判断MainActivity传过来的isFirstRun来确定是否为第一次运行
boolean isFirstRun = intent.getBooleanExtra("isFirstRun", false);
//通过接收Bundle来判断Widget中传递过来的WidgetId
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
//如果WidgetId有效
if(mAppWidgetId!=AppWidgetManager.INVALID_APPWIDGET_ID) {
//判断它是否是第一次运行
SharedPreferences sp=getSharedPreferences(CITY_CODE_FILE, MODE_PRIVATE);
if(sp.getString("code", null)==null) {
//如果不存在城市码,则说明为第一次运行
isFirstRun = true;
} else {
//如存在则直接跳回
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(SetCityActivity.this);
RemoteViews views = new RemoteViews(SetCityActivity.this.getPackageName(),
R.layout.widget_layout);
//得到城市码
String cityCode= sp.getString("code", "");
if(cityCode!=null&&cityCode.trim().length() > 0) {
Log.i("widget", "===================update weather===========================");
//更新widget
WeatherWi
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
天气应用例子(适合初级编程者) (128个子文件)
resources.ap_ 1.62MB
WeatherSystem.apk 1.64MB
proguard.cfg 1KB
SetCityActivity.class 14KB
MainActivity.class 9KB
WeatherWidget.class 6KB
MyListAdapter.class 4KB
MyListAdapter$CityFilter.class 4KB
DBHelper.class 3KB
UpdateWidgetService.class 3KB
SetCityActivity$1$1.class 3KB
SetCityActivity$GoToMainActivity.class 3KB
LocationXMLParser.class 3KB
WebAccessTools.class 2KB
SetCityActivity$MyHandler$1.class 2KB
SetCityActivity$MyHandler.class 2KB
SetCityActivity$3.class 2KB
SetCityActivity$1.class 2KB
SetCityActivity$LocateHandler.class 2KB
R$id.class 2KB
R$drawable.class 2KB
SetCityActivity$2.class 1KB
GPSListAdapter.class 1KB
WeaterInfoParser.class 1KB
R$string.class 821B
R.class 680B
R$color.class 576B
R$layout.class 481B
R$menu.class 389B
R$xml.class 386B
R$raw.class 382B
BuildConfig.class 339B
R$attr.class 331B
.classpath 475B
db_weather.db 90KB
classes.dex 43KB
SetCityActivity.java 21KB
MainActivity.java 14KB
MyListAdapter.java 10KB
R.java 6KB
WeatherWidget.java 6KB
LocationXMLParser.java 3KB
DBHelper.java 3KB
UpdateWidgetService.java 3KB
WebAccessTools.java 2KB
GPSListAdapter.java 2KB
WeaterInfoParser.java 1KB
BuildConfig.java 157B
app_bg02.jpg 91KB
app_bg03.jpg 83KB
app_bg04.jpg 76KB
app_bg01.jpg 48KB
weathericon_condition_06.png 120KB
weathericon_condition_06.png 120KB
weathericon_condition_01.png 116KB
weathericon_condition_01.png 116KB
weathericon_condition_15.png 99KB
weathericon_condition_15.png 99KB
weathericon_condition_03.png 89KB
weathericon_condition_03.png 89KB
weathericon_condition_07.png 88KB
weathericon_condition_07.png 88KB
weathericon_condition_10.png 82KB
weathericon_condition_10.png 82KB
weathericon_condition_02.png 81KB
weathericon_condition_02.png 81KB
weathericon_condition_09.png 70KB
weathericon_condition_09.png 70KB
weathericon_condition_16.png 68KB
weathericon_condition_16.png 68KB
weathericon_condition_12.png 67KB
weathericon_condition_12.png 67KB
weathericon_condition_14.png 64KB
weathericon_condition_14.png 64KB
weathericon_condition_04.png 60KB
weathericon_condition_04.png 60KB
weathericon_condition_13.png 59KB
weathericon_condition_13.png 59KB
weathericon_condition_05.png 56KB
weathericon_condition_05.png 56KB
weathericon_condition_08.png 56KB
weathericon_condition_08.png 56KB
weathericon_condition_11.png 54KB
weathericon_condition_11.png 54KB
weathericon_condition_17.png 38KB
weathericon_condition_17.png 38KB
widget_bg.png 9KB
widget_bg.png 9KB
logo.png 9KB
logo.png 6KB
ic_launcher.png 4KB
ic_launcher.png 4KB
menu_diy.png 4KB
menu_diy.png 4KB
menu_update.png 3KB
menu_update.png 3KB
ic_launcher.png 3KB
ic_launcher.png 2KB
menu_city_manager.png 2KB
menu_city_manager.png 2KB
共 128 条
- 1
- 2
资源评论
楚湘潇瑶
- 粉丝: 10
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功