GPS定位获取位置,获取天气

<strong><span style="font-size:24px;">注:清单文件中要加上权限</span></strong>
<span style="font-size:18px;"><strong>一般我把常用权限都加上了,AndroidManifest.xml</strong></span>
<pre name="code" class="java"> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    <!-- 屏幕休眠 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <!-- 电话 -->
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <!-- 网络状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- WIFI状态 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <!-- 允许访问互联网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <!-- 振动 -->
    <uses-permission android:name="android.permission.VIBRATE" />

    <!-- 短信 -->
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />

    <!-- 录音 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <!-- GPS -->
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- 通讯录 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_LOGS" >
    </uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />

    <uses-permission android:name="android.permission.VIBRATE" />


 
<span style="font-size:24px;"><strong>窗体代码</strong></span>
public class MainActivity extends Activity {

	private TextView txt1,txt2,txt3;
	private String city;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //获取控件
        findView();
        //获取数据
        getData();
    }


    private void getData() {

		// 定义LocationManager对象
		LocationManager locationManager;
		// 获取系统LocationManager服务
		locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		// 从GPS获取最近的定位信息
		Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		
		try{
			
			location.setAccuracy(20);
		}catch(Exception e){
			
		}
//		String coordinate;  
		String lng = "";
		String lat = "";
		try {

			//未纠偏的坐标
			double dLng=location.getLongitude();//经度
			double dLat=location.getLatitude();//纬度
			
			//地球坐标转火星坐标
			Map<String,Double> localMap= GPSModify.transform(dLng,dLat);
			
			//纠偏
			lng=localMap.get("lon")+"";			
			lat=localMap.get("lat")+"";	
			
			txt1.setText("经度"+lng);
			txt2.setText("纬度"+lat);
//			 coordinate = "Latitude:" + lat + "\nLongitude:" + lng;
			
	        double longitude = Double.valueOf(lng);  
	        double latitude = Double.valueOf(lat); 
	        
	        //通过经纬度获取位置
			 Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());  
			
			 List<Address> addresses = geocoder.getFromLocation(latitude,  
					 longitude, 1);  
             StringBuilder sb = new StringBuilder();  
             if (addresses.size() > 0) {  
                 Address address = addresses.get(0);  
//                 for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {  
                     sb.append(address.getAddressLine(0)).append("\n");  
//                 }  
                     //获取天气时需要的地区
              city= address.getLocality().toString().replace("市", "");  
//                 sb.append(address.getLocality()).append("\n");  
//                 sb.append(address.getCountryName()); 
                  //当前位置
                 String addressStr = sb.toString(); 
                 txt3.setText("地址:"+addressStr+"\n天气:" );
                 
                 //异步加载获取天气
                 QueryAsyncTask asyncTask = new QueryAsyncTask();
                 asyncTask.execute("");
//                 String weather=getWeather("北京");
                
             }
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

    private class QueryAsyncTask extends AsyncTask {
		@Override
		protected void onPostExecute(Object result) {
			try {
				if (result != null) {
					String weatherResult = (String) result;
					if (weatherResult.split(";").length > 1) {
						String a = weatherResult.split(";")[1];
						if (a.split("=").length > 1) {
							String b = a.split("=")[1];
							String c = b.substring(1, b.length() - 1);
							String[] resultArr = c.split("\\}");
							if (resultArr.length > 0) {
								todayParse(resultArr[0]);
								System.out.println(resultArr[1]);
								/*
								 * tommrowParse(resultArr[1]);
								 * thirddayParse(resultArr[2]);
								 * ll_yes.setVisibility(View.VISIBLE); //
								 * tv_city.setText(cityName);
								 * tv_city.setText(districtName);
								 */
								// tv_address.setText(districtName);
								
							}

						} else {
							
						}
					} else {
						
					}
				} else {
					
				}
			} catch (Exception e) {
				// TODO: handle exception
				
			}
			super.onPostExecute(result);
		}

		@Override
		protected Object doInBackground(Object... params) {
			// return HttpService.getWeather(districtName);
			return getWeather(city);
		}
	}

	/**
	 * 
	 * 方法名:todayParse 功能:今天天气 参数:
	 * 
	 * @param weather
	 */
	private void todayParse(String weather) {
		System.out.println(weather);
		String temp = weather.replace("'", "");
		String[] tempArr = temp.split(",");
		String wd = "";
		String tq = "";
		String fx = "";
		if (tempArr.length > 0) {
			for (int i = 0; i < tempArr.length; i++) {
				System.out.println(tempArr[i]);
				if (tempArr[i].indexOf("t1:") != -1) {
					wd = tempArr[i].substring(3, tempArr[i].length()) + "℃";
				} else if (tempArr[i].indexOf("t2:") != -1) {
					wd = tempArr[i].substring(3, tempArr[i].length())
							+ "℃"+ "~"+wd;
									;
				} else if (tempArr[i].indexOf("d1:") != -1) {
					fx = tempArr[i].substring(3, tempArr[i].length());
				} else if (tempArr[i].indexOf("s1:") != -1) {
					tq = tempArr[i].substring(4, tempArr[i].length());
				}
			}

//			tv_wd.setText("气温:" + wd);
//			tv_tq.setText("天气情况:" + tq);
//			// tv_attr3.setText("风向:" + fx);
			String txt=txt3.getText().toString();
			 txt3.setText(txt+tq+"\n"+wd+"    "+fx);

		}
	}
//根据城市来获取天气
    public static String getWeather(String city) {
		String result = null;
		String url = "http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city="
				+ city + "&dfc=3";
		try {
			DefaultHttpClient client = getDefaultHttpClient2();
			HttpGet mothod = new HttpGet(url);
			
			HttpResponse httpResponse = client.execute(mothod);
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				result = EntityUtils.toString(httpResponse.getEntity(),
						"gb2312");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			// JavaUtil.ShowDialog(WeatherScreen.this,
			// "查无天气信息",getLayoutInflater(),getWindowManager());
		} finally {
			return result;
		}

	}
    
    private static DefaultHttpClient getDefaultHttpClient2() {
		DefaultHttpClient client;
		HttpParams httpParams = new BasicHttpParams();
		// 设置代理
		String host = android.net.Proxy.getDefaultHost();
		int port = android.net.Proxy.getDefaultPort();
		// Log.v(TAG,"代理:"+host+",端口:"+port);
		if (host != null) {
			HttpHost httpHost = new HttpHost(host, port);
			httpParams.setParameter(ConnRoutePNames.DEFAULT_PROXY, httpHost);
		}
		// 设置超时
		HttpConnectionParams.setConnectionTimeout(httpParams, 20000);
		HttpConnectionParams.setSoTimeout(httpParams, 20000);

		SchemeRegistry schReg = new SchemeRegistry();
		schReg.register(new Scheme("http", PlainSocketFactory
				.getSocketFactory(), 80));
		schReg.register(new Scheme("https",
				SSLSocketFactory.getSocketFactory(), 443));

		// 使用线程安全的连接管理来创建HttpClient
		ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
				httpParams, schReg);
		client = new DefaultHttpClient(conMgr, httpParams);

		return client;
	}


	private void findView() {
    	txt1=(TextView) this.findViewById(R.id.txt1);
    	txt2=(TextView) this.findViewById(R.id.txt2);
    	txt3=(TextView) this.findViewById(R.id.txt3);
		
	}

	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值