AndroidManifest.xml文件配置
<? xml version="1.0"encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.main" android:versionCode="1" android:versionName="1.0"> < application android:icon="@drawable/icon"android:label="@string/app_name"> < activity android:name=".Main" android:label="@string/app_name"> < intent-filter > < action android:name="android.intent.action.MAIN"/> < category android:name="android.intent.category.LAUNCHER"/> </ intent-filter > </ activity > < uses-library android:name="com.google.android.maps"/> </ application > < uses-permission android:name="android.permission.INTERNET"/> < uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> < uses-permission android:name="android.permission.ACCESS_FIND_LOCATION"/> </ manifest >
Main.java文件
package cn.itcast.main; import java.util.List; 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.Overlay; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.location.Address; import android.location.Criteria; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.MotionEvent; import android.widget.TextView; public class Main extends MapActivity { private MapController mapController ; private GeoPoint geoPoint ; private String msg ; @Override public void onCreate( Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView( R . layout . main ); // 获得 mapview MapView mapView=( MapView ) this .findViewById( R . id . mapview ); // 地图的显示格式为交通图 mapView.setTraffic( true ); // 设置可控 mapView.setClickable( true ); mapView.setEnabled( true ); mapView.setBuiltInZoomControls( true ); // 得到 gps 设备的访问 LocationManager locationManager=( LocationManager )getSystemService( Context . LOCATION_SERVICE ); // 设置 gps 定位配置 Criteria criteria= new Criteria (); // 设置显示精度 criteria.setAccuracy( Criteria . ACCURACY_COARSE ); // 是否获得海拔数据 criteria.setAltitudeRequired( false ); // 是否获得方向数据 criteria.setBearingRequired( false ); // 是否允许运营商计费 criteria.setCostAllowed( true ); // 设置耗电程度 criteria.setPowerRequirement( Criteria . POWER_LOW ); // 获得服务供应商 String provider=locationManager.getBestProvider(criteria, true ); // 获取上一个定位点 Location location=locationManager.getLastKnownLocation(provider); // 获得 gps 定位坐标信息 Double latitude=location.getLatitude()*1E6; Double longitude=location.getLongitude()*1E6; // 获得卫星定位点 geoPoint = new GeoPoint (latitude.intValue(),longitude.intValue()); // 获得地图控制器 mapController =mapView.getController(); // 设置地图显示初始化精度 mapController .setZoom(12); mapController .animateTo( geoPoint ); // 实例化自定义绘图层 MyOverlay myOverlay= new MyOverlay (); // mapview 添加绘图层 mapView.getOverlays().add(myOverlay); // 定义一个 final TextView ,以备子类引用 final TextView textView=( TextView ) findViewById( R . id . textview ); LocationListener locationListener= new LocationListener(){ @Override public void onStatusChanged( String provider, int status, Bundle extras) { } @Override public void onProviderEnabled( String provider) { // TODO Auto-generatedmethod stub } @Override public void onProviderDisabled( String provider) { // TODO Auto-generatedmethod stub } @Override public void onLocationChanged( Location location) { Double latitude=location.getLatitude()*1E6; Double longitude=location.getLongitude()*1E6; try { // 获得精度纬度字符串 msg = " 经度: " + location.getLongitude() + "\n" ; msg += " 纬度: " + location.getLatitude() + "\n" ; // 根据经纬度获得改点地址信息 Geocoder gc= new Geocoder ( Main . this ); List< Address > addresses=gc.getFromLocation(latitude, longitude,1); if (addresses.size()>0) { // 获得地址信息 msg += "AddressLine:" +addresses.get(0).getAddressLine(0)+ "\n" ; // 获得国家名 msg += "CountryName " + addresses.get(0).getCountryName()+ "\n" ; msg += "Locality " + addresses.get(0).getLocality() + "\n" ; msg += "FeatureName " + addresses.get(0).getFeatureName(); } textView.setText( msg ); } catch ( Exception e) { e.printStackTrace(); } } }; // 注册位置监听器, 1 秒钟扫描 1 locationManager.requestLocationUpdates(provider, 1000, 0, locationListener); } class MyOverlay extends Overlay { // 保证触控事件不重复操作 private int count =0; @Override public boolean draw( Canvas canvas, MapView mapView, boolean shadow, long when) { // 定义画笔 Paint paint= new Paint (); paint.setColor( Color . RED ); // 定义屏幕点 Point screenPoint= new Point (); //gps 点转屏幕点 mapView.getProjection().toPixels( geoPoint , screenPoint); // 获得 gps 标志点图片 Bitmap bitmap= BitmapFactory .decodeResource(getResources(), R . drawable . flag ); // 绘制 gps 点图片 canvas.drawBitmap(bitmap,screenPoint. x ,screenPoint. y , paint); // 绘制文字说明 canvas.drawText( " 当前位置 " , screenPoint. x , screenPoint. y , paint); return super .draw(canvas, mapView, shadow, when); } @Override public boolean onTouchEvent( MotionEvent e, MapView mapView) { // 定义一个屏幕点 Point screenPoint= new Point (); // gps 点变成屏幕点 mapView.getProjection().toPixels( geoPoint , screenPoint); // 获得触点坐标 int currentX=( int ) e.getX(); int currentY=( int ) e.getY(); // 50 30 范围内触碰,显示当前经纬度 if ((currentX-screenPoint. x )>=0&&(currentX-screenPoint. x )<50 &&(currentY-screenPoint. y >=0)&&(currentY-screenPoint. y )<30) { if ( count ==0) { new AlertDialog . Builder ( Main . this ).setMessage( msg ) .setPositiveButton( " 确定 " , new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { count =0; } }).show(); } count ++; } return super .onTouchEvent(e, mapView); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generatedmethod stub return false ; } }
1 :如果你的手机上没有 gps 定位系统,会有以下错误
08-10 13:04:55.610:ERROR/AndroidRuntime(492): java.lang.RuntimeException: Unable to start activityComponentInfo{cn.itcast.main/cn.itcast.main.Main}: java.lang.IllegalArgumentException:provider==null
2 :记得去 google 官网
http://code.google.com/intl/zh-CN/android/maps-api-signup.html
申请自己机器的 apikey
C:\Documents and Settings\Administrator\.android>keytool -list-keystore debug.kEystore
默认密码 android
我机器的 apikey ,你用不好使
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0EITsWoXq7NC_mgKW6yIxIViNLhMGsIW4dbmlsg
/>
最终实现效果:随着 android 客户端得移动,在地图上提供精确的当前所在位置

更多相关文章

  1. android 获取屏幕宽高、view宽高
  2. Android屏幕方向及键盘状态
  3. android折叠展开自定义列表项测试
  4. 自定义Tab选项卡
  5. android绘制view的过程(自定义view一)
  6. Android 高仿微信头像截取 打造不一样的自定义控件
  7. Android中的UI界面控制方式和自定义View
  8. android中自定义Toast方法详解(一)

随机推荐

  1. Android多模块构建合并aar解决方案
  2. Android 基础总结:(十一)ContentResolver与C
  3. Android 开发:gen already exists but is
  4. Android文章博客收藏
  5. AndServer,一个Android端的web服务器
  6. Android中的状态选择器
  7. AndroidStudio多渠道打包心得
  8. Android 调试之 Log和LogCat的详解
  9. Android(安卓)NDK开发:JNI基础篇
  10. shape 的创建和使用