Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android百度地圖之定位SDK(v3.1)使用示例(二)

Android百度地圖之定位SDK(v3.1)使用示例(二)

編輯:Android開發實例

       在上一篇的基礎上(  Android百度地圖之定位SDK(v3.1)使用示例(一) )淺談在室外使用百度地圖定位服務。

一、在戶外使用GPS定位,修改LocationClient對象的屬性即可,我在下班的路上測了下,定位結果比較准確。

      1、修改LocationClientOption對象的屬性,也就是修改了LocationClient對象的 mLocationClient.setLocOption(option);屬性。

  1. LocationClientOption option = new LocationClientOption();  
  2.       
  3.      // 需要地址信息,設置為其他任何值(string類型,且不能為null)時,都表示無地址信息。  
  4.      option.setAddrType("all");  
  5.      // 設置是否返回POI的電話和地址等詳細信息。默認值為false,即不返回POI的電話和地址信息。   
  6.      option.setPoiExtraInfo(true);  
  7.        
  8.      // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。   
  9.      option.setProdName("通過GPS定位我當前的位置");  
  10.        
  11.      // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。   
  12.      option.setOpenGps(true);  
  13.        
  14.      // 定位的時間間隔,單位:ms  
  15.      // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。  
  16.      // option.setScanSpan(1000);  
  17.        
  18.      // 查詢范圍,默認值為500,即以當前定位位置為中心的半徑大小。  
  19.      option.setPoiDistance(500);  
  20.      // 禁用啟用緩存定位數據  
  21.      option.disableCache(true);  
  22.        
  23.      // 坐標系類型,百度手機地圖對外接口中的坐標系默認是bd09ll  
  24.      option.setCoorType("bd09ll");  
  25.        
  26.      // 設置最多可返回的POI個數,默認值為3。由於POI查詢比較耗費流量,設置最多返回的POI個數,以便節省流量。  
  27.      option.setPoiNumber(3);  
  28.        
  29.      // 設置定位方式的優先級。  
  30.      // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。  
  31.      option.setPriority(LocationClientOption.GpsFirst);  

     2、與上一篇裡的屬性設置差別:

  1. // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。   
  2.        option.setProdName("通過GPS定位我當前的位置");  
  3.          
  4.        // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。   
  5.        option.setOpenGps(true);  
  6.          
  7.        // 設置定位方式的優先級。  
  8.        // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。  
  9.        option.setPriority(LocationClientOption.GpsFirst);  

二、設置定位時間間隔:

 百度API裡的說明:

      1、當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。如果定位SDK根據定位依據發現位置沒有發生變化,就不會發起網絡請求,返回上一次定位的結果;如果發現位置改變,就進行網絡請求進行定位,得到新的定位結果。定時定位時,調用一次requestLocation,會定時監聽到定位結果。

      2、當不設此項,或者所設的整數值小於1000(ms)時,采用一次定位模式。每調用一次requestLocation( ),定位SDK會發起一次定位。請求定位與監聽結果一一對應。

      3、設定了定時定位後,可以熱切換成一次定位,需要重新設置時間間隔小於1000(ms)即可。locationClient對象stop後,將不再進行定位。如果設定了定時定位模式後,多次調用requestLocation(),則是每隔一段時間進行一次定位,同時額外的定位請求也會進行定位,但頻率不會超過1秒一次。         

我實際調用了下,LocationClientOption對象其它屬性設置不變。當所設的整數值大於等於1000(ms)時,會每隔設定的時間就重新定位一次。

  1. // 定位的時間間隔,單位:ms  
  2.         // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。  
  3.         option.setScanSpan(1000);  

三、完整代碼:

  1. package com.android.baidu.map;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.View;  
  7. import android.widget.TextView;  
  8.  
  9. import com.baidu.location.BDLocation;  
  10. import com.baidu.location.BDLocationListener;  
  11. import com.baidu.location.LocationClient;  
  12. import com.baidu.location.LocationClientOption;  
  13.  
  14. /**  
  15.  * 通過GPS定位獲取值  
  16.  * @author android_ls  
  17.  *  
  18.  */ 
  19. public class BaiduMapLoaction2Activity extends Activity {  
  20.      
  21.     private static final String TAG = "BaiduMapLoactionActivity";  
  22.       
  23.     private LocationClient mLocationClient;  
  24.       
  25.     private MyBDLocationListener mBDLocationListener;  
  26.       
  27.     private TextView mContent;  
  28.       
  29.     @Override 
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);  
  33.           
  34.         mLocationClient = new LocationClient(this.getApplicationContext());  
  35.           
  36.         mBDLocationListener = new MyBDLocationListener();  
  37.         mLocationClient.registerLocationListener(mBDLocationListener);  
  38.           
  39.         LocationClientOption option = new LocationClientOption();  
  40.          
  41.         // 需要地址信息,設置為其他任何值(string類型,且不能為null)時,都表示無地址信息。  
  42.         option.setAddrType("all");  
  43.         // 設置是否返回POI的電話和地址等詳細信息。默認值為false,即不返回POI的電話和地址信息。   
  44.         option.setPoiExtraInfo(true);  
  45.           
  46.         // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。   
  47.         option.setProdName("通過GPS定位我當前的位置");  
  48.           
  49.         // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。   
  50.         option.setOpenGps(true);  
  51.           
  52.         // 定位的時間間隔,單位:ms  
  53.         // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。  
  54.         // option.setScanSpan(1000);  
  55.           
  56.         // 查詢范圍,默認值為500,即以當前定位位置為中心的半徑大小。  
  57.         option.setPoiDistance(500);  
  58.         // 禁用啟用緩存定位數據  
  59.         option.disableCache(true);  
  60.           
  61.         // 坐標系類型,百度手機地圖對外接口中的坐標系默認是bd09ll  
  62.         option.setCoorType("bd09ll");  
  63.           
  64.         // 設置最多可返回的POI個數,默認值為3。由於POI查詢比較耗費流量,設置最多返回的POI個數,以便節省流量。  
  65.         option.setPoiNumber(3);  
  66.           
  67.         // 設置定位方式的優先級。  
  68.         // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。  
  69.         option.setPriority(LocationClientOption.GpsFirst);  
  70.           
  71.         mLocationClient.setLocOption(option);  
  72.         
  73.         mContent = (TextView) this.findViewById(R.id.tv_content);  
  74.           
  75.         // 發起定位請求  
  76.         findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() {  
  77.               
  78.             @Override 
  79.             public void onClick(View v) {  
  80.                  mLocationClient.start();  
  81.             }  
  82.         });  
  83.           
  84.           
  85.         // 重新定位  
  86.          findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() {  
  87.               
  88.             @Override 
  89.             public void onClick(View v) {  
  90.                   
  91.                 if (mLocationClient != null && mLocationClient.isStarted())  
  92.                   mLocationClient.requestLocation();  
  93.             }  
  94.         });  
  95.           
  96.          // 發起查詢請求  
  97.          findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() {  
  98.               
  99.             @Override 
  100.             public void onClick(View v) {  
  101.                   
  102.                 if (mLocationClient != null && mLocationClient.isStarted())  
  103.                     mLocationClient.requestPoi();  
  104.             }  
  105.         });   
  106.           
  107.     }  
  108.       
  109.       
  110.     final class MyBDLocationListener implements BDLocationListener{  
  111.  
  112.         @Override 
  113.         public void onReceiveLocation(BDLocation location) {  
  114.             Log.e(TAG, "---------onReceiveLocation()---------");  
  115.               
  116.             if(location == null){  
  117.                 Log.e(TAG, "---------onReceiveLocation------location is NULL----");  
  118.                 return;  
  119.             }  
  120.               
  121.             int type = location.getLocType();  
  122.             Log.i(TAG, "當前定位采用的類型是:type = " + type);  
  123.               
  124.             String coorType = location.getCoorType();  
  125.             Log.i(TAG, "坐標系類型:coorType = " + coorType);  
  126.               
  127.                // 判斷是否有定位精度半徑  
  128.             if(location.hasRadius()){  
  129.                 // 獲取定位精度半徑,單位是米  
  130.                 float accuracy = location.getRadius();  
  131.                 Log.i(TAG, "accuracy = " + accuracy);  
  132.             }  
  133.               
  134.             if(location.hasAddr()){  
  135.                 // 獲取反地理編碼。 只有使用網絡定位的情況下,才能獲取當前位置的反地理編碼描述。  
  136.                 String address = location.getAddrStr();  
  137.                 Log.i(TAG, "address = " + address);  
  138.             }  
  139.               
  140.             String province = location.getProvince();  // 獲取省份信息  
  141.             String city = location.getCity();  // 獲取城市信息  
  142.             String district = location.getDistrict(); // 獲取區縣信息  
  143.               
  144.             Log.i(TAG, "province = " + province);  
  145.             Log.i(TAG, "city = " + city);  
  146.             Log.i(TAG, "district = " + district);  
  147.               
  148.             double latitude = location.getLatitude();  
  149.             double longitude = location.getLongitude();  
  150.             Log.i(TAG, "latitude = " + latitude);  
  151.             Log.i(TAG, "longitude = " + longitude);  
  152.               
  153.               
  154.             StringBuffer sb = new StringBuffer(256);  
  155.             sb.append("time : ");  
  156.             sb.append(location.getTime());  
  157.             sb.append("\nerror code : ");  
  158.             sb.append(location.getLocType());  
  159.             sb.append("\nlatitude : ");  
  160.             sb.append(location.getLatitude());  
  161.             sb.append("\nlontitude : ");  
  162.             sb.append(location.getLongitude());  
  163.             sb.append("\nradius : ");  
  164.             sb.append(location.getRadius());  
  165.             if (location.getLocType() == BDLocation.TypeGpsLocation){  
  166.                 sb.append("\nspeed : ");  
  167.                 sb.append(location.getSpeed());  
  168.                 sb.append("\nsatellite : ");  
  169.                 sb.append(location.getSatelliteNumber());  
  170.             } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){  
  171.                 sb.append("\naddr : ");  
  172.                 sb.append(location.getAddrStr());  
  173.             }   
  174.        
  175.               
  176.             mContent.setText(sb);  
  177.         }  
  178.  
  179.         @Override 
  180.         public void onReceivePoi(BDLocation poiLocation) {  
  181.               
  182.             Log.e(TAG, "---------onReceivePoi()---------");  
  183.               
  184.             if(poiLocation == null){  
  185.                 Log.e(TAG, "---------onReceivePoi------location is NULL----");  
  186.                 return;  
  187.             }  
  188.               
  189.             if(poiLocation.hasPoi()){  
  190.                 String poiStr = poiLocation.getPoi();  
  191.                 Log.i(TAG, "poiStr = " + poiStr);  
  192.                   
  193.             }  
  194.               
  195.             if(poiLocation.hasAddr()){  
  196.                 // 獲取反地理編碼。 只有使用網絡定位的情況下,才能獲取當前位置的反地理編碼描述。  
  197.                 String address = poiLocation.getAddrStr();  
  198.                 Log.i(TAG, "address = " + address);  
  199.             }  
  200.               
  201.             StringBuffer sb = new StringBuffer(256);  
  202.             sb.append("Poi time : ");  
  203.             sb.append(poiLocation.getTime());  
  204.             sb.append("\nerror code : ");  
  205.             sb.append(poiLocation.getLocType());  
  206.             sb.append("\nlatitude : ");  
  207.             sb.append(poiLocation.getLatitude());  
  208.             sb.append("\nlontitude : ");  
  209.             sb.append(poiLocation.getLongitude());  
  210.             sb.append("\nradius : ");  
  211.             sb.append(poiLocation.getRadius());  
  212.             if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){  
  213.                 sb.append("\naddr : ");  
  214.                 sb.append(poiLocation.getAddrStr());  
  215.             }   
  216.             if(poiLocation.hasPoi()){  
  217.                 sb.append("\nPoi:");  
  218.                 sb.append(poiLocation.getPoi());  
  219.             }else{                
  220.                 sb.append("noPoi information");  
  221.             }  
  222.               
  223.             mContent.setText(sb);  
  224.               
  225.         }  
  226.           
  227.     }  
  228.       
  229.     @Override 
  230.     protected void onDestroy() {  
  231.         if(mLocationClient != null && mLocationClient.isStarted()){  
  232.             if(mBDLocationListener != null){  
  233.                 mLocationClient.unRegisterLocationListener(mBDLocationListener);  
  234.             }  
  235.               
  236.             mLocationClient.stop();  
  237.             mLocationClient = null;  
  238.         }  
  239.           
  240.         super.onDestroy();  
  241.     }  
  242.       
  243.       
  244. }  
  245.  
  246.  
  247.  



轉自:http://blog.csdn.net/android_ls/article/details/8583656

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved