編輯:Android開發實例
在上一篇的基礎上( Android百度地圖之定位SDK(v3.1)使用示例(一) )淺談在室外使用百度地圖定位服務。
一、在戶外使用GPS定位,修改LocationClient對象的屬性即可,我在下班的路上測了下,定位結果比較准確。
1、修改LocationClientOption對象的屬性,也就是修改了LocationClient對象的 mLocationClient.setLocOption(option);屬性。
- LocationClientOption option = new LocationClientOption();
- // 需要地址信息,設置為其他任何值(string類型,且不能為null)時,都表示無地址信息。
- option.setAddrType("all");
- // 設置是否返回POI的電話和地址等詳細信息。默認值為false,即不返回POI的電話和地址信息。
- option.setPoiExtraInfo(true);
- // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。
- option.setProdName("通過GPS定位我當前的位置");
- // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。
- option.setOpenGps(true);
- // 定位的時間間隔,單位:ms
- // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。
- // option.setScanSpan(1000);
- // 查詢范圍,默認值為500,即以當前定位位置為中心的半徑大小。
- option.setPoiDistance(500);
- // 禁用啟用緩存定位數據
- option.disableCache(true);
- // 坐標系類型,百度手機地圖對外接口中的坐標系默認是bd09ll
- option.setCoorType("bd09ll");
- // 設置最多可返回的POI個數,默認值為3。由於POI查詢比較耗費流量,設置最多返回的POI個數,以便節省流量。
- option.setPoiNumber(3);
- // 設置定位方式的優先級。
- // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。
- option.setPriority(LocationClientOption.GpsFirst);
2、與上一篇裡的屬性設置差別:
- // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。
- option.setProdName("通過GPS定位我當前的位置");
- // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。
- option.setOpenGps(true);
- // 設置定位方式的優先級。
- // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。
- 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)時,會每隔設定的時間就重新定位一次。
- // 定位的時間間隔,單位:ms
- // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。
- option.setScanSpan(1000);
三、完整代碼:
- package com.android.baidu.map;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.TextView;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- /**
- * 通過GPS定位獲取值
- * @author android_ls
- *
- */
- public class BaiduMapLoaction2Activity extends Activity {
- private static final String TAG = "BaiduMapLoactionActivity";
- private LocationClient mLocationClient;
- private MyBDLocationListener mBDLocationListener;
- private TextView mContent;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mLocationClient = new LocationClient(this.getApplicationContext());
- mBDLocationListener = new MyBDLocationListener();
- mLocationClient.registerLocationListener(mBDLocationListener);
- LocationClientOption option = new LocationClientOption();
- // 需要地址信息,設置為其他任何值(string類型,且不能為null)時,都表示無地址信息。
- option.setAddrType("all");
- // 設置是否返回POI的電話和地址等詳細信息。默認值為false,即不返回POI的電話和地址信息。
- option.setPoiExtraInfo(true);
- // 設置產品線名稱。強烈建議您使用自定義的產品線名稱,方便我們以後為您提供更高效准確的定位服務。
- option.setProdName("通過GPS定位我當前的位置");
- // 打開GPS,使用gps前提是用戶硬件打開gps。默認是不打開gps的。
- option.setOpenGps(true);
- // 定位的時間間隔,單位:ms
- // 當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。
- // option.setScanSpan(1000);
- // 查詢范圍,默認值為500,即以當前定位位置為中心的半徑大小。
- option.setPoiDistance(500);
- // 禁用啟用緩存定位數據
- option.disableCache(true);
- // 坐標系類型,百度手機地圖對外接口中的坐標系默認是bd09ll
- option.setCoorType("bd09ll");
- // 設置最多可返回的POI個數,默認值為3。由於POI查詢比較耗費流量,設置最多返回的POI個數,以便節省流量。
- option.setPoiNumber(3);
- // 設置定位方式的優先級。
- // 當gps可用,而且獲取了定位結果時,不再發起網絡請求,直接返回給用戶坐標。這個選項適合希望得到准確坐標位置的用戶。如果gps不可用,再發起網絡請求,進行定位。
- option.setPriority(LocationClientOption.GpsFirst);
- mLocationClient.setLocOption(option);
- mContent = (TextView) this.findViewById(R.id.tv_content);
- // 發起定位請求
- findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mLocationClient.start();
- }
- });
- // 重新定位
- findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mLocationClient != null && mLocationClient.isStarted())
- mLocationClient.requestLocation();
- }
- });
- // 發起查詢請求
- findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mLocationClient != null && mLocationClient.isStarted())
- mLocationClient.requestPoi();
- }
- });
- }
- final class MyBDLocationListener implements BDLocationListener{
- @Override
- public void onReceiveLocation(BDLocation location) {
- Log.e(TAG, "---------onReceiveLocation()---------");
- if(location == null){
- Log.e(TAG, "---------onReceiveLocation------location is NULL----");
- return;
- }
- int type = location.getLocType();
- Log.i(TAG, "當前定位采用的類型是:type = " + type);
- String coorType = location.getCoorType();
- Log.i(TAG, "坐標系類型:coorType = " + coorType);
- // 判斷是否有定位精度半徑
- if(location.hasRadius()){
- // 獲取定位精度半徑,單位是米
- float accuracy = location.getRadius();
- Log.i(TAG, "accuracy = " + accuracy);
- }
- if(location.hasAddr()){
- // 獲取反地理編碼。 只有使用網絡定位的情況下,才能獲取當前位置的反地理編碼描述。
- String address = location.getAddrStr();
- Log.i(TAG, "address = " + address);
- }
- String province = location.getProvince(); // 獲取省份信息
- String city = location.getCity(); // 獲取城市信息
- String district = location.getDistrict(); // 獲取區縣信息
- Log.i(TAG, "province = " + province);
- Log.i(TAG, "city = " + city);
- Log.i(TAG, "district = " + district);
- double latitude = location.getLatitude();
- double longitude = location.getLongitude();
- Log.i(TAG, "latitude = " + latitude);
- Log.i(TAG, "longitude = " + longitude);
- StringBuffer sb = new StringBuffer(256);
- sb.append("time : ");
- sb.append(location.getTime());
- sb.append("\nerror code : ");
- sb.append(location.getLocType());
- sb.append("\nlatitude : ");
- sb.append(location.getLatitude());
- sb.append("\nlontitude : ");
- sb.append(location.getLongitude());
- sb.append("\nradius : ");
- sb.append(location.getRadius());
- if (location.getLocType() == BDLocation.TypeGpsLocation){
- sb.append("\nspeed : ");
- sb.append(location.getSpeed());
- sb.append("\nsatellite : ");
- sb.append(location.getSatelliteNumber());
- } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
- sb.append("\naddr : ");
- sb.append(location.getAddrStr());
- }
- mContent.setText(sb);
- }
- @Override
- public void onReceivePoi(BDLocation poiLocation) {
- Log.e(TAG, "---------onReceivePoi()---------");
- if(poiLocation == null){
- Log.e(TAG, "---------onReceivePoi------location is NULL----");
- return;
- }
- if(poiLocation.hasPoi()){
- String poiStr = poiLocation.getPoi();
- Log.i(TAG, "poiStr = " + poiStr);
- }
- if(poiLocation.hasAddr()){
- // 獲取反地理編碼。 只有使用網絡定位的情況下,才能獲取當前位置的反地理編碼描述。
- String address = poiLocation.getAddrStr();
- Log.i(TAG, "address = " + address);
- }
- StringBuffer sb = new StringBuffer(256);
- sb.append("Poi time : ");
- sb.append(poiLocation.getTime());
- sb.append("\nerror code : ");
- sb.append(poiLocation.getLocType());
- sb.append("\nlatitude : ");
- sb.append(poiLocation.getLatitude());
- sb.append("\nlontitude : ");
- sb.append(poiLocation.getLongitude());
- sb.append("\nradius : ");
- sb.append(poiLocation.getRadius());
- if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){
- sb.append("\naddr : ");
- sb.append(poiLocation.getAddrStr());
- }
- if(poiLocation.hasPoi()){
- sb.append("\nPoi:");
- sb.append(poiLocation.getPoi());
- }else{
- sb.append("noPoi information");
- }
- mContent.setText(sb);
- }
- }
- @Override
- protected void onDestroy() {
- if(mLocationClient != null && mLocationClient.isStarted()){
- if(mBDLocationListener != null){
- mLocationClient.unRegisterLocationListener(mBDLocationListener);
- }
- mLocationClient.stop();
- mLocationClient = null;
- }
- super.onDestroy();
- }
- }
轉自:http://blog.csdn.net/android_ls/article/details/8583656
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
比如要獲取打開攝像頭的應用程序名稱,只需要在frameworks/base/core/android/hardware/Camera.java中open()方法中
酷酷的外表已經具備了,那就開始讓我們真正把它的功能給實現起來吧,外強中干,花拳繡腿可不行哦,我們需要真正的本領,需要一顆自強不息的心哦,常常想想自己的夢想什麼,這
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個