publicclassActivity01extendsMapActivity
{
publicMapControllermapController;
publicMyLocationOverlaymyPosition;
publicMapViewmyMapView;
privatestaticfinalintZOOM_IN=Menu.FIRST;
privatestaticfinalintZOOM_OUT=Menu.FIRST+1;

publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得LocationManager实例
LocationManagerlocationManager;
Stringcontext=Context.LOCATION_SERVICE;
locationManager=(LocationManager)getSystemService(context);
myMapView=(MapView)findViewById(R.id.MapView01);
//取得MapController实例,控制地图
mapController=myMapView.getController();
//设置显示模式
myMapView.setSatellite(true);
myMapView.setStreetView(true);
//设置缩放控制,这里我们自己实现缩放菜单
myMapView.displayZoomControls(false);
//设置使用MyLocationOverlay来绘图
mapController.setZoom(17);
myPosition=newMyLocationOverlay();
List<Overlay>overlays=myMapView.getOverlays();
overlays.add(myPosition);
//设置Criteria(服务商)的信息
Criteriacriteria=newCriteria();
//经度要求
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
//取得效果最好的criteria
Stringprovider=locationManager.getBestProvider(criteria,true);
//得到坐标相关的信息
Locationlocation=locationManager.getLastKnownLocation(provider);
//更新坐标
updateWithNewLocation(location);
//注册一个周期性的更新,3000ms更新一次
//locationListener用来监听定位信息的改变
locationManager.requestLocationUpdates(provider,3000,0,locationListener);
}
privatevoidupdateWithNewLocation(Locationlocation)
{
StringlatLongString;
TextViewmyLocationText=(TextView)findViewById(R.id.TextView01);

StringaddressString="没有找到地址\n";

if(location!=null)
{
//为绘制标志的类设置坐标
myPosition.setLocation(location);
//取得经度和纬度
DoublegeoLat=location.getLatitude()*1E6;
DoublegeoLng=location.getLongitude()*1E6;
//将其转换为int型
GeoPointpoint=newGeoPoint(geoLat.intValue(),geoLng.intValue());
//定位到指定坐标
mapController.animateTo(point);
doublelat=location.getLatitude();
doublelng=location.getLongitude();
latLongString="经度:"+lat+"\n纬度:"+lng;

doublelatitude=location.getLatitude();
doublelongitude=location.getLongitude();
//更具地理环境来确定编码
Geocodergc=newGeocoder(this,Locale.getDefault());
try
{
//取得地址相关的一些信息\经度、纬度
List<Address>addresses=gc.getFromLocation(latitude,longitude,1);
StringBuildersb=newStringBuilder();
if(addresses.size()>0)
{
Addressaddress=addresses.get(0);
for(inti=0;i<address.getMaxAddressLineIndex();i++)
sb.append(address.getAddressLine(i)).append("\n");

sb.append(address.getLocality()).append("\n");
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName());
addressString=sb.toString();
}
}catch(IOExceptione){}
}
else
{
latLongString="没有找到坐标.\n";
}
//显示
myLocationText.setText("你当前的坐标如下:\n"+latLongString+"\n"+addressString);
}
privatefinalLocationListenerlocationListener=newLocationListener()
{
//当坐标改变时触发此函数
publicvoidonLocationChanged(Locationlocation)
{
updateWithNewLocation(location);
}
//Provider被disable时触发此函数,比如GPS被关闭
publicvoidonProviderDisabled(Stringprovider)
{
updateWithNewLocation(null);
}
//Provider被enable时触发此函数,比如GPS被打开
publicvoidonProviderEnabled(Stringprovider){}
//Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}
};
protectedbooleanisRouteDisplayed()
{
returnfalse;
}
//为应用程序添加菜单
publicbooleanonCreateOptionsMenu(Menumenu)
{
super.onCreateOptionsMenu(menu);
menu.add(0,ZOOM_IN,Menu.NONE,"放大");
menu.add(0,ZOOM_OUT,Menu.NONE,"缩小");
returntrue;
}
publicbooleanonOptionsItemSelected(MenuItemitem)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case(ZOOM_IN):
//放大
mapController.zoomIn();
returntrue;
case(ZOOM_OUT):
//缩小
mapController.zoomOut();
returntrue;
}
returntrue;
}


classMyLocationOverlayextendsOverlay
{
LocationmLocation;
//在更新坐标时,设置该坐标,一边画图
publicvoidsetLocation(Locationlocation)
{
mLocation=location;
}
@Override
publicbooleandraw(Canvascanvas,MapViewmapView,booleanshadow,longwhen)
{
super.draw(canvas,mapView,shadow);
Paintpaint=newPaint();
PointmyScreenCoords=newPoint();
//将经纬度转换成实际屏幕坐标
GeoPointtmpGeoPoint=newGeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6));
mapView.getProjection().toPixels(tmpGeoPoint,myScreenCoords);
paint.setStrokeWidth(1);
paint.setARGB(255,255,0,0);
paint.setStyle(Paint.Style.STROKE);
Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.home);
canvas.drawBitmap(bmp,myScreenCoords.x,myScreenCoords.y,paint);
canvas.drawText("HereamI",myScreenCoords.x,myScreenCoords.y,paint);
returntrue;
}
}
}

XML中:

<uses-libraryandroid:name="com.google.android.maps"/>

<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

更多相关文章

  1. Android获取View位置
  2. android 怎样用代码设置墙纸
  3. android dialog
  4. 开源项目Universal Image Loader for Android(安卓)说明文档 (2)
  5. Android(安卓)HttpClient
  6. Android一直震动源码
  7. Android(安卓)HttpClient
  8. ADB 实现Android(安卓)Http 代理
  9. Android(安卓)Path的使用

随机推荐

  1. vs code的插件配置、markdown和emmet基本
  2. html注册页面-表单
  3. HTML常用标签汇总
  4. 一个网站有多个域名,怎么处理对SEO比较友
  5. 站群团队分工合作细则
  6. 如何找到一个SEO细分市场进行创业?
  7. 学习SEO创业机会怎样?
  8. Static Page-静态页面
  9. 做SEO时,需要了解哪些HTML标签 ?
  10. Nofollow属性的介绍和使用