package com.android.ddj.fzbmzxc;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import android.app.Application;
import android.util.Log;
import android.widget.Toast;
/**
* @author dingdj
* Date:2013-11-8上午9:28:55
*
*/
public class Location extends Application{
public static final String BAIDU_MAP_KEY = "DDd84c3134edbc8fadf80761efd90ff0";
public LocationClient mLocationClient = null;
public MyLocationListenner myListener = new MyLocationListenner();
public double[] curLatLng = new double[2]; //当前位置的经纬度信息
private LocationChanger locationChanger;
public BMapManager mBMapMan = null;
private boolean firstLocate = false;
private static Location mInstance;
@Override
public void onCreate() {
mLocationClient = new LocationClient( this );
mLocationClient.setAK(BAIDU_MAP_KEY);
mLocationClient.registerLocationListener(myListener);
super.onCreate();
mBMapMan=new BMapManager(this);
mBMapMan.init(Location.BAIDU_MAP_KEY, null);
mInstance = this;
}
/**
* 监听函数,得到当前位置信息 并通知界面进行刷新
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null){
return ;
}
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());
}
sb.append("\nsdk version : ");
sb.append(mLocationClient.getVersion());
sb.append("\nisCellChangeFlag : ");
sb.append(location.isCellChangeFlag());
logMsg(sb.toString());
curLatLng[0] = location.getLatitude();
curLatLng[1] = location.getLongitude();
firstLocate = true;
notityLocationChanger();
}
public void onReceivePoi(BDLocation poiLocation) {
Log.v("location", "location is null poi");
if (poiLocation == null){
return ;
}
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");
}
logMsg(sb.toString());
}
}
/**
* 显示请求字符串
* @param str
*/
public void logMsg(String str) {
Log.d("Location", str);
}
public void registerLocationChanger(LocationChanger locationChanger) {
this.locationChanger = locationChanger;
}
public void notityLocationChanger(){
if(this.locationChanger != null){
locationChanger.locationChange();
}
}
@Override
public void onTerminate() {
if(mBMapMan!=null){
mBMapMan.destroy();
mBMapMan=null;
}
super.onTerminate();
}
public static Location getInstance() {
return mInstance;
}
// 常用事件监听,用来处理通常的网络错误,授权验证错误等
public static class MyGeneralListener implements MKGeneralListener {
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(Location.getInstance().getApplicationContext(), "您的网络出错啦!",
Toast.LENGTH_LONG).show();
}
else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(Location.getInstance().getApplicationContext(), "输入正确的检索条件!",
Toast.LENGTH_LONG).show();
}
// ...
}
@Override
public void onGetPermissionState(int iError) {
if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
//授权Key错误:
Toast.makeText(Location.getInstance().getApplicationContext(),
"key错误!", Toast.LENGTH_LONG).show();
}
}
}
public boolean isFirstLocate() {
return firstLocate;
}
}