Android客户端GPS定位源码

213 篇文章 0 订阅
192 篇文章 0 订阅
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);

       

        //获得服务供应商

        Stringprovider=locationManager.getBestProvider(criteria, true);

        //获取上一个定位点

        Locationlocation=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);

        //定义一个finalTextView,以备子类引用

       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();

           //5030范围内触碰,显示当前经纬度

           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 客户端得移动,在地图上提供精确的当前所在位置
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值