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(安卓)Path的使用
  2. CentOS 安装 Android
  3. Android开发人员不得不收集的代码
  4. Android简单实现更换桌面背景的方法
  5. Android情景模式、文件管理器 完整示例编程详解
  6. Android(安卓)DatePicker与TimePicker 日期时间弹出工具类
  7. android 获取屏幕宽高、view宽高
  8. android sqlite 增删查 demo
  9. 自定义Tab选项卡

随机推荐

  1. Android受手机制造商青睐 是福是祸
  2. Android事件分发机制 详解攻略,您值得拥有
  3. Android APP设计加载使用gif动图需要注意
  4. Android中textView自动识别电话号码,电子
  5. 《Android/OPhone 开发完全讲义》样章和
  6. 菜鸟初学者学习Android心得
  7. 从零开始--系统深入学习android(理论-开发
  8. Android[中级教程] 深入剖析Android消息
  9. 基于安卓手持设备的手机应用编程——用户
  10. Android之根据经纬度查询位置地址名称