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

        
  1. <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
  2. <uses-permissionandroid:name="android.permission.INTERNET"/>
  3. <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
  4. 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

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

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

获得速度

实例:得到你自己的位置

        
  1. //获取自己的位置
  2. btnGetPosition.setOnClickListener(newView.OnClickListener(){
  3. @Override
  4. publicvoidonClick(Viewv){
  5. System.out.println("获取当前位置");
  6. locationManager=(LocationManager)LocationManagerDemoActivity.this
  7. .getSystemService(Context.LOCATION_SERVICE);
  8. Locationlocation=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  9. System.out.println("你当前的位置:");
  10. StringBuildersb=newStringBuilder("你当前的位置(经纬度):");
  11. sb.append("(");
  12. sb.append(location.getLatitude());
  13. sb.append(",");
  14. sb.append(location.getLongitude());
  15. sb.append(")");
  16. System.out.println(location.getLatitude());
  17. System.out.println(location.getLongitude());
  18. txtPostion.setText(sb);
  19. }
  20. });

实例:追踪位置:

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

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

        
  1. locationManager.requestLocationUpdates(
  2. LocationManager.GPS_PROVIDER,500,500,newlistener());

实例:获取最好的LocationProivider

        
  1. LocationManager.getBasetProvider(Criteriacriteria,booleanis)

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

获得精度

        
  1. //获取最佳的Provider
  2. btnBestProvider.setOnClickListener(newView.OnClickListener(){
  3. @Override
  4. publicvoidonClick(Viewv){
  5. StringbestProviders="";
  6. locationManager=(LocationManager)LocationManagerDemoActivity.this
  7. .getSystemService(Context.LOCATION_SERVICE);
  8. //新建一个Criteria
  9. Criteriacriteria=newCriteria();
  10. //设置精确度
  11. criteria.setAccuracy(Criteria.ACCURACY_COARSE);
  12. criteria.setPowerRequirement(Criteria.POWER_LOW);
  13. criteria.setAltitudeRequired(false);
  14. criteria.setBearingRequired(false);
  15. criteria.setSpeedRequired(false);
  16. criteria.setCostAllowed(false);
  17. //获得符合条件的provider
  18. bestProviders=locationManager
  19. .getBestProvider(criteria,false);
  20. txtCrerita.setText("最佳的provider:"+bestProviders);
  21. }
  22. });

总结(再看GPS):

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

更多相关文章

  1. 【Android(安卓)开发教程】Notification通知
  2. nfs: server 192.168.0.3 not responding, still trying
  3. Android触摸事件(三)-触摸事件类使用实例
  4. Android读取SIM联系人信息
  5. Android(安卓)Studio--使用Toast
  6. Android(安卓)开发笔记
  7. Android(安卓)系统中WiFi的部署
  8. Android学习:TextUtils类介绍
  9. Android(安卓)Activity启动模式全面解析

随机推荐

  1. [置顶] Android中View的加载过程
  2. Android主流屏幕分辨率介绍
  3. ListView有背景图片或背景颜色,那么在滑动
  4. android openGL ES2 一切从绘制纹理开始
  5. Android(安卓)ViewPager实现循环轮播图
  6. android 7种网络连接方式《IT蓝豹》
  7. Android之Handler非主线程更新UI
  8. [置顶] 关于Android分辨率的支持(转)
  9. Android组件之间的交互
  10. [置顶] Android App关于应用程序升级的一