`
zxl_ong
  • 浏览: 126648 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Google API应用

阅读更多
获取Location Provider:
android location provider有两个
a、LocationManager.GPS_PROVIDER:
对应权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
b、LocationManager.NETWORK_PROVIDER:
对应权限<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" />
	private Location getLocationProvider(LocationManager mLocationManager) {
                //该方法可以根据当前设备情况自动选择哪种provider
		Location location = null;
		try {
			Criteria mcriteria = new Criteria();
			mcriteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
			mcriteria.setAltitudeRequired(false);//不要求海拔信息
			mcriteria.setBearingRequired(false);//不要求方位信息
			mcriteria.setCostAllowed(true);//是否允许付费
			mcriteria.setPowerRequirement(Criteria.POWER_LOW);//对电量要求
			//mLocationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
			strLocationProvider = mLocationManager.getBestProvider(mcriteria, true);
			location = mLocationManager.getLastKnownLocation(strLocationProvider);//获取位置信息
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return location;
	}


注册一个周期性的位置更新:
   locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,  
     1000, 0, locationListener);  

这句代码告诉系统,我们需要从GPS获取位置信息,并且是每隔1000ms更新一次,并且不考虑位置的变化。最后一个参数是LocationListener的一个引用,我们必须要实现这个类。
 private final LocationListener locationListener = new LocationListener() {                                                           
     public void onLocationChanged(Location location) { //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发  
         // log it when the location changes  
         if (location != null) {  
             Log.i("SuperMap", "Location changed : Lat: "  
               + location.getLatitude() + " Lng: "  
               + location.getLongitude());  
         }  
     }  
   
     public void onProviderDisabled(String provider) {  
     // Provider被disable时触发此函数,比如GPS被关闭  
     }  
   
     public void onProviderEnabled(String provider) {  
     //  Provider被enable时触发此函数,比如GPS被打开  
     }  
   
     public void onStatusChanged(String provider, int status, Bundle extras) {  
     // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数  
     }  
 };  

在成功注册了一个周期性坐标更新以后,我们就随时可以通过下面的方法来取得当前的坐标了。
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  


	//根据经纬度获取GeoPoint对象
	private GeoPoint getGeoByLocation(Location location) {
		// TODO Auto-generated method stub
		GeoPoint gp = null;
		try {
			if (location != null) {
				double geolat = location.getLatitude() * 1E6;
				double geolng = location.getLongitude() * 1E6;
				gp = new GeoPoint((int) (geolat), (int) (geolng));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return gp;
	}


	//根据输入地址获取GeoPoint对象
	private GeoPoint getGeoByAddres(String strSearchAddres) {
		GeoPoint gp = null;

		try {
			if (strSearchAddres != "") {

				Geocoder mGeocoder = new Geocoder(My_Map.this, Locale.getDefault());
				//Geocoder mGeocoder = new Geocoder(My_Map.this, Locale.CHINA);
				Log.i("[My_Map.getGeoByAddress()]", "***strSearchAddres" + strSearchAddres);
				List<Address> lstAddres = mGeocoder.getFromLocationName(
						strSearchAddres, 1);

				if (!lstAddres.isEmpty()) {
					Address adsLocation = lstAddres.get(0);
					double geolat = adsLocation.getLatitude() * 1E6;
					double geolng = adsLocation.getLongitude() * 1E6;
					gp = new GeoPoint((int) (geolat), (int) (geolng));

				}else{
					Log.d(tag, "not found geopoint");
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return gp;
	}


	//根据GeoPoint获取地址
	public String getAddresByGeoPoint(GeoPoint gp) {
		String str = "";

		try {
			if (gp != null) {
				Geocoder gc = new Geocoder(My_Map.this, Locale.getDefault());

				double geoLat = (int) gp.getLatitudeE6() / 1E6;
				double geolng = (int) gp.getLongitudeE6() / 1E6;

				List<Address> lstAddress = gc
						.getFromLocation(geoLat, geolng, 1);

				StringBuilder sb = new StringBuilder();
				if (lstAddress.size() > 0) {
					Address adsLocation = lstAddress.get(0);
					for (int i = 0; i < adsLocation.getMaxAddressLineIndex(); i++) {
						sb.append(adsLocation.getAddressLine(i)).append("\n");
					}
					sb.append(adsLocation.getLocality()).append("\n");
					sb.append(adsLocation.getPostalCode()).append("\n");
					sb.append(adsLocation.getCountryName());
				}
				str = sb.toString();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return str;
	}


//设置地图模式
		private void selectViewMode(int mode) {
				switch (mode) {
				case 0://街景模式
					map.setTraffic(false);
					map.setSatellite(false);
					map.setStreetView(true);
					break;
				case 1://交通流量
					map.setSatellite(false);
					map.setStreetView(false);
					map.setTraffic(true);
					break;
				case 2://卫星地图
					map.setStreetView(false);
					map.setTraffic(false);
					map.setSatellite(true);
					break;
				}
		};


	//根据经纬度来刷新地图
	public void refreshMap() {
		GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
		map.displayZoomControls(true);
		mc.animateTo(p);
		mc.setZoom(intZoomLevel);
	}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics