Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 百度SDK定位

百度SDK定位

編輯:關於Android編程

package com.example.baidulocdemo_2;


import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import android.content.Context;

/**
 * 
 * @author baidu
 *
 */
public class LocationService {
	private LocationClient client = null;
	private LocationClientOption mOption,DIYoption;
	private Object  objLock = new Object();

	/***
	 * 
	 * @param locationContext
	 */
	public LocationService(Context locationContext){
		synchronized (objLock) {
			if(client == null){
				client = new LocationClient(locationContext);
				client.setLocOption(getDefaultLocationClientOption());
			}
		}
	}///LocationService
	
	/***
	 * 
	 * @param listener
	 * @return
	 */
	
	public boolean registerListener(BDLocationListener listener){
		boolean isSuccess = false;
		if(listener != null){
			client.registerLocationListener(listener);
			isSuccess = true;
		}
		return  isSuccess;
	}
	
	public void unregisterListener(BDLocationListener listener){
		if(listener != null){
			client.unRegisterLocationListener(listener);
		}
	}
	
	/***
	 * 
	 * @param option
	 * @return isSuccessSetOption
	 */
	public boolean setLocationOption(LocationClientOption option){
		boolean isSuccess = false;
		if(option != null){
			if(client.isStarted())
				client.stop();
			DIYoption = option;
			client.setLocOption(option);
		}
		return isSuccess;
	}
	
	public LocationClientOption getOption(){
		return DIYoption;
	}
	/***
	 * 
	 * @return DefaultLocationClientOption
	 */
	public LocationClientOption getDefaultLocationClientOption(){
		if(mOption == null){
			mOption = new LocationClientOption();
			mOption.setLocationMode(LocationMode.Hight_Accuracy);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
			mOption.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果坐標系,如果配合百度地圖使用,建議設置為bd09ll;
			mOption.setScanSpan(3000);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大於等於1000ms才是有效的
		    mOption.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要
		    mOption.setIsNeedLocationDescribe(true);//可選,設置是否需要地址描述
		    mOption.setNeedDeviceDirect(false);//可選,設置是否需要設備方向結果
		    mOption.setLocationNotify(false);//可選,默認false,設置是否當gps有效時按照1S1次頻率輸出GPS結果
		    mOption.setIgnoreKillProcess(true);//可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死   
		    mOption.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裡得到,結果類似於“在北京天安門附近”
		    mOption.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList裡得到
		    mOption.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
		}
		return mOption;
	}
	
	public void start(){
		synchronized (objLock) {
			if(client != null && !client.isStarted()){
				client.start();
			}
		}
	}
	public void stop(){
		synchronized (objLock) {
			if(client != null && client.isStarted()){
				client.stop();
			}
		}
	}///stop
	
}

package com.example.baidulocdemo_2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

//public class MainActivity extends Activity {
//private TextView areaTextView;
//	
//	@Override
//	protected void onCreate(Bundle savedInstanceState) {
//		super.onCreate(savedInstanceState);
//		setContentView(R.layout.activity_main);
//	}
//}
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.Poi;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

/***
 * 單點定位示例,用來展示基本的定位結果,配置在LocationService.java中 默認配置也可以在LocationService中修改
 * 默認配置的內容自於開發者論壇中對開發者長期提出的疑問內容
 * 
 * @author baidu
 * 
 */
public class MainActivity extends Activity {
	// private LocationService locationService;
	private LocationService locationService;
	private TextView LocationResult;
	private Button startLocation;

	// BDLocation location = new BDLocation();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		// -----------demo view config ------------
		setContentView(R.layout.activity_main);
		LocationResult = (TextView) findViewById(R.id.areaTextView);
		LocationResult.setMovementMethod(ScrollingMovementMethod.getInstance());
		// startLocation = (Button) findViewById(R.id.addfence);
		locationService = new LocationService(getApplicationContext());
		// mVibrator
		// =(Vibrator)getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE);
		// / WriteLog.getInstance().init(); // 初始化日志
		// SDKInitializer.initialize(getApplicationContext());
		// 獲取locationservice實例,建議應用中只初始化1個location實例,然後使用,可以參考其他示例的activity,都是通過此種方式獲取locationservice實例的
		locationService.registerListener(mListener);
		// 注冊監聽
		int type = getIntent().getIntExtra("from", 0);
		if (type == 0) {
			locationService.setLocationOption(locationService
					.getDefaultLocationClientOption());
		} else if (type == 1) {
			locationService.setLocationOption(locationService.getOption());
		}

		locationService.start();

	}// //onCreate

	/*****
	 * @see copy funtion to you project
	 *      定位結果回調,重寫onReceiveLocation方法,可以直接拷貝如下代碼到自己工程中修改
	 * 
	 */
	private BDLocationListener mListener = new BDLocationListener() {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// TODO Auto-generated method stub
			if (null != location
					&& location.getLocType() != BDLocation.TypeServerError) {
				StringBuffer sb = new StringBuffer(256);
				// sb.append("time : ");
				/**
				 * 時間也可以使用systemClock.elapsedRealtime()方法 獲取的是自從開機以來,每次回調的時間;
				 * location.getTime() 是指服務端出本次結果的時間,如果位置不發生變化,則時間不變
				 */
				// 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());
				// sb.append("\nCountryCode : ");
				// sb.append(location.getCountryCode());
				// sb.append("\nCountry : ");
				// sb.append(location.getCountry());
				// sb.append("\ncitycode : ");
				// sb.append(location.getCityCode());
				// sb.append("\ncity : ");
				sb.append(location.getProvince());
				sb.append(location.getCity());
				// sb.append("\nDistrict : ");
				sb.append(location.getDistrict());
				// sb.append("\nStreet : ");
				sb.append(location.getStreet());
				// sb.append("\naddr : ");
				// sb.append(location.getAddrStr());
				// sb.append("\nDescribe: ");
				// sb.append(location.getLocationDescribe());
				// sb.append("\nDirection(not all devices have value): ");
				// sb.append(location.getDirection());
				// sb.append("\nPoi: ");
				if (location.getPoiList() != null
						&& !location.getPoiList().isEmpty()) {
					for (int i = 0; i < location.getPoiList().size(); i++) {
						Poi poi = (Poi) location.getPoiList().get(i);
						sb.append(poi.getName() + ";");
					}
				}
				if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位結果
					sb.append("\nspeed : ");
					sb.append(location.getSpeed());// 單位:km/h
					sb.append("\nsatellite : ");
					sb.append(location.getSatelliteNumber());
					sb.append("\nheight : ");
					sb.append(location.getAltitude());// 單位:米
					sb.append("\ndescribe : ");
					sb.append("gps定位成功");
				} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 網絡定位結果
					// 運營商信息
					sb.append("\noperationers : ");
					sb.append(location.getOperators());
					sb.append("\ndescribe : ");
					sb.append("網絡定位成功");
				} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果
					sb.append("\ndescribe : ");
					sb.append("離線定位成功,離線定位結果也是有效的");
				} else if (location.getLocType() == BDLocation.TypeServerError) {
					sb.append("\ndescribe : ");
					sb.append("服務端網絡定位失敗,可以反饋IMEI號和大體定位時間到[email protected],會有人追查原因");
				} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
					sb.append("\ndescribe : ");
					sb.append("網絡不同導致定位失敗,請檢查網絡是否通暢");
				} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
					sb.append("\ndescribe : ");
					sb.append("無法獲取有效定位依據導致定位失敗,一般是由於手機的原因,處於飛行模式下一般會造成這種結果,可以試著重啟手機");
				}
				// logMsg(sb.toString());
				LocationResult.setText(sb.toString());
			}
		}

	};

}




    

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
         

        
            
                

                
            
        

        
            
                
                
            
        
    




    


\

\

以上親測可用

http://lbsyun.baidu.com/sdk/download?selected=location,在這個網址下載jar文件

 

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