package com.shutao.testlocation;
import java.text.NumberFormat;
import java.util.List;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;
public class TestLocationWithMap extends MapActivity {
/** Called when the activity is first created. */
LocationManager locationManager;
MapView map;
MapController mapcont;
Button inButton, outButton;
ToggleButton satellite_switch_button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*
* 如要在地图上标记位置,就需要用到Overlay类。Overlay类是一种专门用于在地图上用 2d图像进行标记的类
*/
map = (MapView) findViewById(R.id.mapView);
// //标记位置/
List<Overlay> overlays = map.getOverlays();
MyLocationOverlay myLocation = new MyLocationOverlay(this, map);
myLocation.enableMyLocation();
overlays.add(myLocation);
// 获得MapView的控制
mapcont = map.getController();
// ///使用了ZoomControls,故不用按钮控制,当应该知道
/*
* inButton = (Button) findViewById(R.id.zoomIn); outButton = (Button)
* findViewById(R.id.zoomOut);
*
* OnClickListener listener = new OnClickListener() {
*
* @Override public void onClick(View v) { switch (v.getId()) { case
* R.id.zoomIn: mapcont.zoomIn(); break; case R.id.zoomOut:
* mapcont.zoomOut(); break; default: break; } } };
* inButton.setOnClickListener(listener);
* outButton.setOnClickListener(listener);
*/
//
ViewGroup zoom = (ViewGroup) findViewById(R.id.zoom);
zoom.addView(map.getZoomControls());
// //启用卫星视图/
satellite_switch_button = (ToggleButton) findViewById(R.id.button_satellite);
satellite_switch_button
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
map.setSatellite(true);
} else {
map.setSatellite(false);
}
}
});
// ///
String serviceName = Context.LOCATION_SERVICE;
/* 获得LocationManager实例 */
locationManager = (LocationManager) this.getSystemService(serviceName);
// 查询条件
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
/* 使用GPS定位技术 */
// v1.0 String provider = LocationManager.GPS_PROVIDER;
// v2.0
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);
locationManager.requestLocationUpdates(provider, 2000, 5,
locationListener);
}
private final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
@Override
public void onProviderDisabled(String provider) {
updateWithNewLocation(null);
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
private void updateWithNewLocation(Location location_) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(6);
String latLongString;
TextView myLocationText;
myLocationText = (TextView) findViewById(R.id.locationText);
if (location_ != null) {
double lat = location_.getLatitude();
double lng = location_.getLongitude();
lat = Double.parseDouble(nf.format(lat).replaceAll(",", ""));
lng = Double.parseDouble(nf.format(lng).replaceAll(",", ""));
latLongString = "纬度:" + lat + "\n经度:" + lng;
// 增强用户的体验,平滑移动到新位置
mapcont
.animateTo(new GeoPoint((int) (lat * 1E6),
(int) (lng * 1E6)));
} else {
location_ = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location_ != null) {
double lat = location_.getLatitude();
double lng = location_.getLongitude();
lat = Double.parseDouble(nf.format(lat).replaceAll(",", ""));
lng = Double.parseDouble(nf.format(lng).replaceAll(",", ""));
latLongString = "纬度:" + lat + "\n经度:" + lng;
mapcont.animateTo(new GeoPoint((int) (lat * 1E6),
(int) (lng * 1E6)));
} else {
latLongString = "无法获取地理信息";
}
}
myLocationText.setText("您当前的位置是:\n" + latLongString);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
android使用GPS
最新推荐文章于 2021-04-20 16:11:24 发布