歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android入門之GPS定位詳解

Android入門之GPS定位詳解

日期:2017/3/1 11:17:29   编辑:Linux編程

一、LocationManager

LocationMangager,位置管理器。要想操作定位相關設備,必須先定義個LocationManager。

  1. LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

二、LocationListener

LocationListener,位置監聽,監聽位置變化,監聽設備開關與狀態。

  1. //定義
  2. LocationListener locationListener=new LocationListener(){
  3. //位置信息變化時觸發
  4. public void onLocationChanged(Location location) {
  5. system.out.println("時間:"+location.getTime());
  6. system.out.println("經度:"+location.getLongitude());
  7. system.out.println("緯度:"+location.getLatitude());
  8. system.out.println("海拔:"+location.getAltitude());
  9. }
  10. //gps禁用時觸發
  11. public void onProviderDisabled(String provider) {
  12. system.out.println("當前GPS狀態:禁用\n");
  13. }
  14. //gps開啟時觸發
  15. public void onProviderEnabled(String provider) {
  16. system.out.println("當前GPS狀態:開啟\n");
  17. }
  18. //gps狀態變化時觸發
  19. public void onStatusChanged(String provider, int status,Bundle extras) {
  20. if(status==LocationProvider.AVAILABLE){
  21. system.out.println("當前GPS狀態:可見的\n");
  22. }else if(status==LocationProvider.OUT_OF_SERVICE){
  23. system.out.println("當前GPS狀態:服務區外\n");
  24. }else if(status==LocationProvider.TEMPORARILY_UNAVAILABLE){
  25. system.out.println("當前GPS狀態:暫停服務\n");
  26. }
  27. }
  28. };
  29. //綁定監聽,有4個參數
  30. //參數1,設備:有GPS_PROVIDER和NETWORK_PROVIDER兩種,我們選用GPS,網絡在此不做討論
  31. //參數2,位置信息更新周期:
  32. //參數3,位置變化最小距離:當位置距離變化超過此值時,將更新位置信息
  33. //參數4,監聽
  34. //備注:參數2和3,如果參數3不為0,則以參數3為准;參數3為0,則通過時間來定時更新;兩者為0,則隨時刷新
  35. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

三、Location

Location,位置信息,通過Location可以獲取時間、經緯度、海拔等位置信息。上面采用locationListener裡面的onLocationChanged()來獲取location,下面講述如何主動獲取location。

  1. Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  2. system.out.println("時間:"+location.getTime());
  3. system.out.println("經度:"+location.getLongitude());

注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式獲取的location的各個參數值都是為0。

四、GpsStatus.Listener

GpsStatus.Listener ,GPS狀態監聽,包括GPS啟動、停止、第一次定位、衛星變化等事件。

view plaincopy to clipboardprint?
  1. //定義
  2. GpsStatus.Listener gpsStatusListener=new GpsStatus.Listener(){
  3. public void onGpsStatusChanged(int event) {
  4. if(event==GpsStatus.GPS_EVENT_FIRST_FIX){
  5. //第一次定位
  6. }else if(event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){
  7. //衛星狀態改變
  8. GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取當前狀態
  9. int maxSatellites = gpsStauts.getMaxSatellites(); //獲取衛星顆數的默認最大值
  10. Iterator<GpsSatellite> it = gpsStatus.getSatellites().iterator();//創建一個迭代器保存所有衛星
  11. int count = 0;
  12. while (it.hasNext() && count <= maxSatellites) {
  13. GpsSatellite s = it.next();
  14. count++;
  15. }
  16. system.out.println("搜索到:"+count+"顆衛星");
  17. }else if(event==GpsStatus.GPS_EVENT_STARTED){
  18. //定位啟動
  19. }else if(event==GpsStatus.GPS_EVENT_STOPPED){
  20. //定位結束
  21. }
  22. }
  23. };
  24. //綁定
  25. locationManager.addGpsStatusListener(gpsStatusListener);

五、GpsStatus

GpsStatus,GPS狀態信息,上面在衛星狀態變化時,我們就用到了GpsStatus。

  1. //實例化
  2. GpsStatus gpsStatus = locationManager.getGpsStatus(null); // 取當前狀態
  3. //獲取默認最大衛星數
  4. int maxSatellites = gpsStatus.getMaxSatellites();
  5. //獲取第一次定位時間(啟動到第一次定位)
  6. int costTime=gpsStatus.getTimeToFirstFix();
  7. //獲取衛星
  8. Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
  9. //一般再次轉換成Iterator
  10. Iterator<GpsSatellite> itrator=iterable.iterator();

六、GpsSatellite

GpsSatellite,定位衛星,包含衛星的方位、高度、偽隨機噪聲碼、信噪比等信息。

  1. //獲取衛星
  2. Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
  3. //再次轉換成Iterator
  4. Iterator<GpsSatellite> itrator=iterable.iterator();
  5. //通過遍歷重新整理為ArrayList
  6. ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>();
  7. int count=0;
  8. int maxSatellites=gpsStatus.getMaxSatellites();
  9. while (itrator.hasNext() && count <= maxSatellites) {
  10. GpsSatellite satellite = itrator.next();
  11. satelliteList.add(satellite);
  12. count++;
  13. }
  14. System.out.println("總共搜索到"+count+"顆衛星");
  15. //輸出衛星信息
  16. for(int i=0;i<satelliteList.size();i++){
  17. //衛星的方位角,浮點型數據
  18. System.out.println(satelliteList.get(i).getAzimuth());
  19. //衛星的高度,浮點型數據
  20. System.out.println(satelliteList.get(i).getElevation());
  21. //衛星的偽隨機噪聲碼,整形數據
  22. System.out.println(satelliteList.get(i).getPrn());
  23. //衛星的信噪比,浮點型數據
  24. System.out.println(satelliteList.get(i).getSnr());
  25. //衛星是否有年歷表,布爾型數據
  26. System.out.println(satelliteList.get(i).hasAlmanac());
  27. //衛星是否有星歷表,布爾型數據
  28. System.out.println(satelliteList.get(i).hasEphemeris());
  29. //衛星是否被用於近期的GPS修正計算
  30. System.out.println(satelliteList.get(i).hasAlmanac());
  31. }
Copyright © Linux教程網 All Rights Reserved