初探Android平台上的定位服务(GPS)

特别声明:以下所有操作都别忘记了加上权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
 
 <uses-permission android:name="android.permission.INTERNET" /> 
 
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
 
sp; 
LocationManager

 

通过LocationManager可以实现设备的定位、跟踪和趋近提示。它不需要你直接来实例化,我们可以通过Context.getSystemService(Context.LOCATION_SERVICE). 来获得LocationManager实例。

常用属性和方法

  

属性和方法 描述
GPS_PROVIDER 静态字符串常量,表明LocationProvider是GPS
NETWORK_PROVIDER 静态字符串常量,表明LocationProvider是网络
addGpsStatusListener(GpsStatus.Listener listener) 添加一个GPS状态监听器
addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent) 添加一个趋近警告
getAllProviders() 获得所有的LocationProvider列表
getBestProvider(Criteria criteria, boolean enabledOnly) 根据Criteria返回最适合的LocationProvider
getLastKnownLocation(String provider) 根据Provider获得位置信息
getProvider(String name) 获得指定名称的LocationProvider
getProvider(boolean enableOnly) 获得可利用的LocationProvider列表
removeProximityAlert(PendingIntent intent) 删除趋近警告
requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent) 通过给定的Provider名称,周期性地通知当前Activity
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 通过给定的Provider名称,并将其绑定指定的LocationListener监听器
   

 
 
 

LocationProvider

 

LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。

  

属性或者方法名称 描述
AVAILABLE 静态整型常量,标示是否可利用
OUT_OF_SERVICE 静态整型常量,不在服务区
TEMPORAILY_UNAVAILABLE 静态整型常量,临时不可利用
getAccuarcy() 获得精度
getName() 获得名称
getPowerRequirement() 获得电源需求
hasMonetaryCost() 花钱的还是免费的
requiresCell() 是否需要访问基站网络
requiresNetWork() 是否需要Intent网络数据
requiresSatelite() 是否需要访问卫星
supportsAltitude() 是否能够提供高度信息
supportsBearing() 是否能够提供方向信息
supportsSpeed() 是否能够提供速度信息

 

实例:获取设备上的所有的LocationProviders


locationManager=(LocationManager)LocationManagerDemoActivity.this.getSystemService(Context.LOCATION_SERVICE); 
 
               
 
              //获取所有的LocationProvider  
 
              List<String> allproviders=locationManager.getAllProviders(); 
 
              for (String string : allproviders) { 
 
                  System.out.println(string); 
 
              } 

\

 

Location类

 

 

它用于描述当前设备的地理位置信息,包括了经纬度、方向、高度和速度等。可以通过LocationManager.getLastKnownLocation(String provider)方法可以获得Location实例

其常见方法和属性:


 

方法 描述
public float getAccuracy () 获得精确度
public double getAltitude () 获得高度
public float getBearing () 获得方向
public double getLatitude () 获取经度
public double getLongitude () 获得纬度
public float getSpeed () 获得速度

 


 实例:得到你自己的位置
\
 

// 获取自己的位置  
 
   btnGetPosition.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
          System.out.println("获取当前位置"); 
 
          locationManager = (LocationManager) LocationManagerDemoActivity.this 
 
                 .getSystemService(Context.LOCATION_SERVICE); 
 
 
 
    
 
 
 
          Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
 
          System.out.println("你当前的位置:");  www.2cto.com
 
          StringBuilder sb=new StringBuilder("你当前的位置(经纬度):"); 
 
          sb.append("("); 
 
          sb.append(location.getLatitude()); 
 
          sb.append(","); 
 
          sb.append(location.getLongitude()); 
 
          sb.append(")"); 
 
          System.out.println(location.getLatitude()); 
 
          System.out.println(location.getLongitude()); 
 
          txtPostion.setText(sb); 
 
       } 
 
   }); 
    // 获取自己的位置

       btnGetPosition.setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

              System.out.println("获取当前位置");

              locationManager = (LocationManager) LocationManagerDemoActivity.this

                     .getSystemService(Context.LOCATION_SERVICE);

 

      

 

              Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

              System.out.println("你当前的位置:");

              StringBuilder sb=new StringBuilder("你当前的位置(经纬度):");

              sb.append("(");

              sb.append(location.getLatitude());

              sb.append(",");

              sb.append(location.getLongitude());

              sb.append(")");

              System.out.println(location.getLatitude());

              System.out.println(location.getLongitude());

              txtPostion.setText(sb);

           }

       });

 
 

实例:追踪位置:

requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener)

关于参数minTime,minDistance的说明是指当用户位置改变多少纬度时候多长时间更新下这个用户的位置

   


locationManager.requestLocationUpdates( 
 
                  LocationManager.GPS_PROVIDER, 500, 500, new listener()); 
   locationManager.requestLocationUpdates(

                     LocationManager.GPS_PROVIDER, 500, 500, new listener());

 
实例:获取最好的LocationProivider


LocationManager.getBasetProvider(Criteria criteria,boolean is) 
LocationManager.getBasetProvider(Criteria criteria,boolean is)

 
Criteria类

 
 它封装了用于获得LocationProvider的条件,可以根据指定的Criteria条件来过滤获得LocationProvider
及常用属性和方法如下:

属性或访求名称 描述
ACCERACY_COARSE 粗糙精确度
ACCURACY_FINE 较高精确度
POWER_HING 用电高
POWER_LOW 用电低
isAlititudeRequried() 返回Provider是否需要高度信息
isBearingRequired() 返回Provider是否需要方位信息
isSpeedRequried() 返回Provider是否需要速度信息
isCostAllowed() 是否允许产生费用
setAccuracy(int accuracy) 设置Provider的精确度
setAltitudeRequired (boolean altitudeRequired) 设置Provider是否需要高度信息
setBearingRequired (boolean bearingRequired) 设置Provider是否需要方位信息
setCostAllowed (boolean costAllowed) 设置Provider是否产生费用
setSpeedAccuracy (int accuracy) 设置Provider是否需要速度信息
getAccuracy() 获得精度

 
 

\

 

// 获取最佳的Provider  
 
   btnBestProvider.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
          String bestProviders = ""; 
 
          locationManager = (LocationManager) LocationManagerDemoActivity.this 
 
                 .getSystemService(Context.LOCATION_SERVICE); 
 
          // 新建一个Criteria  
 
          Criteria criteria = new Criteria(); 
 
          // 设置精确度  
 
          criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
 
          criteria.setPowerRequirement(Criteria.POWER_LOW); 
 
          criteria.setAltitudeRequired(false); 
 
          criteria.setBearingRequired(false); 
 
          criteria.setSpeedRequired(false); 
 
          criteria.setCostAllowed(false); 
 
          // 获得符合条件的provider  
 
          bestProviders = locationManager 
 
                 .getBestProvider(criteria, false); 
 
          txtCrerita.setText("最佳的provider:"+bestProviders); 
 
           
 
       } 
 
   }); 
    // 获取最佳的Provider

       btnBestProvider.setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

              String bestProviders = "";

              locationManager = (LocationManager) LocationManagerDemoActivity.this

                     .getSystemService(Context.LOCATION_SERVICE);

              // 新建一个Criteria

              Criteria criteria = new Criteria();

              // 设置精确度

              criteria.setAccuracy(Criteria.ACCURACY_COARSE);

              criteria.setPowerRequirement(Criteria.POWER_LOW);

              criteria.setAltitudeRequired(false);

              criteria.setBearingRequired(false);

              criteria.setSpeedRequired(false);

              criteria.setCostAllowed(false);

              // 获得符合条件的provider

              bestProviders = locationManager

                     .getBestProvider(criteria, false);

              txtCrerita.setText("最佳的provider:"+bestProviders);

             

           }

       }); www.2cto.com

 
总结(再看GPS):

从以上知识我们可以知道,要想使用Android平台下的GPS服务我们就得用LocationManager这个系统服务,我们可以通过Context.getSystemService(Context.LOCATION_SERVIER)来得到这个LocationManager对象实例,有了这么一个服务后,我们可以通过LocationProvider来描述位置提供者,为了某种需要我们又用到了一个Criteria类来设置满足我们自己的最佳要求,那么这一切都搞定的时候,获取我们自己所在的位置我们就用到了Location类,这个类用来获取我们自己的位置,例如:经纬度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值