package com.keju.maomao; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.Application; import android.content.Context; import android.location.Location; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.LocationData; import com.baidu.mapapi.map.MKEvent; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.PopupOverlay; import com.baidu.mapapi.search.MKAddrInfo; import com.baidu.mapapi.search.MKBusLineResult; import com.baidu.mapapi.search.MKDrivingRouteResult; import com.baidu.mapapi.search.MKGeocoderAddressComponent; import com.baidu.mapapi.search.MKPoiResult; import com.baidu.mapapi.search.MKSearch; import com.baidu.mapapi.search.MKSearchListener; import com.baidu.mapapi.search.MKShareUrlResult; import com.baidu.mapapi.search.MKSuggestionResult; import com.baidu.mapapi.search.MKTransitRouteResult; import com.baidu.mapapi.search.MKWalkingRouteResult; import com.baidu.platform.comapi.basestruct.GeoPoint; import com.keju.maomao.db.DataBaseAdapter; /** * 应用全局变量 * * @author Zhoujun 说明: 1、可以缓存一些应用全局变量。比如数据库操作对象 */ public class CommonApplication extends Application { /** * Singleton pattern */ private static CommonApplication instance; public BMapManager mBMapManager = null;// 地图管理类; public static final String mStrKey = "x2mcje0YDuQOzk7c2GYGrwZw"; boolean m_bKeyRight = true; private BDLocation lastLocation;// 位置 LocationData locData = null; public LocationClient mLocationClient = null; public MyLocationListenner myListener = new MyLocationListenner(); private MKSearch mSearch; // 搜索定位 private MKSearchListener mSearchListener; private String city;// 定位城市 /** * 数据库操作类 * * @return */ private DataBaseAdapter dataBaseAdapter; public static CommonApplication getInstance() { return instance; } @Override public void onCreate() { super.onCreate(); instance = this; initBMapInfo(); dataBaseAdapter = new DataBaseAdapter(this); dataBaseAdapter.open(); } /** * 初始化地图信息 */ public void initBMapInfo() { if (mBMapManager == null) { mBMapManager = new BMapManager(this); } if (!mBMapManager.init(mStrKey, new MyGeneralListener())) { // Toast.makeText(this, "BMapManager 初始化错误!", Toast.LENGTH_SHORT).show(); } mLocationClient = new LocationClient(getApplicationContext()); /** * —————————————————————————————————————————————————————————————————— * 这里的AK和应用签名包名绑定,如果使用在自己的工程中需要替换为自己申请的Key * —————————————————————————————————————————————————————————————————— */ locData = new LocationData(); // mLocationClient.setAK(mStrKey); mLocationClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setServiceName("com.baidu.location.f"); option.setPriority(LocationClientOption.NetWorkFirst);// 网络优先 option.setOpenGps(true); option.setScanSpan(500);// 设置定位模式,小于1秒则一次定位;大于等于1秒则定时定位 option.disableCache(true); option.setCoorType("bd09ll"); // 设置坐标类型 mLocationClient.setLocOption(option); mSearch = new MKSearch(); mSearchListener = new MySearchListener(); mSearch.init(mBMapManager, mSearchListener); mLocationClient.start(); } // /** // * 当位置发生变化时触发此方法 // * // * @param location // * 当前位置 // */ // public void onLocationChanged(Location location) { // if (location != null) { // // 将当前位置转换成地理坐标点 // mSearch.reverseGeocode(new GeoPoint((int) (location.getLatitude() * 1e6), // (int) (location.getLongitude() * 1e6))); // } // } /** * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) { return; } lastLocation = location; locData.latitude = location.getLatitude(); locData.longitude = location.getLongitude(); mSearch.reverseGeocode(new GeoPoint((int) (locData.latitude * 1e6), (int) (locData.longitude * 1e6))); mLocationClient.stop(); } public void onReceivePoi(BDLocation poiLocation) { if (poiLocation == null) { return; } } } // 常用事件监听,用来处理通常的网络错误,授权验证错误等 private class MyGeneralListener implements MKGeneralListener { @Override public void onGetNetworkState(int iError) { if (iError == MKEvent.ERROR_NETWORK_CONNECT) { // Toast.makeText(CommonApplication.getInstance(), "您的网络出错啦!", // Toast.LENGTH_SHORT).show(); } else if (iError == MKEvent.ERROR_NETWORK_DATA) { // Toast.makeText(CommonApplication.getInstance(), "输入正确的检索条件!", // Toast.LENGTH_SHORT).show(); } } @Override public void onGetPermissionState(int iError) { if (iError == MKEvent.ERROR_PERMISSION_DENIED) { // 授权Key错误: // Toast.makeText(CommonApplication.getInstance(), // "请输入正确的授权Key!", Toast.LENGTH_SHORT).show(); CommonApplication.getInstance().m_bKeyRight = false; } } } class MySearchListener implements MKSearchListener { /** * 根据经纬度搜索地址信息结果 * * @param result * 搜索结果 * * @param iError * 错误号(0表示正确返回) * * */ @Override public void onGetAddrResult(MKAddrInfo result, int error) { MKGeocoderAddressComponent kk = result.addressComponents; city = kk.province; setCity(city); } @Override public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { } @Override public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) { } @Override public void onGetPoiDetailSearchResult(int arg0, int arg1) { } @Override public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { } @Override public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) { } @Override public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { } @Override public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { } @Override public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) { } } @Override public void onTerminate() { super.onTerminate(); } public BDLocation getLastLocation() { return lastLocation; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } /** * 获得数据库操作对象 * * @return */ public DataBaseAdapter getDbAdapter() { return this.dataBaseAdapter; } /** * 缓存activity对象索引 */ public List<Activity> activities = new ArrayList<Activity>();; public List<Activity> getActivities() { return activities; } public void addActivity(Activity mActivity) { activities.add(mActivity); } } /** * 继承MapView重写onTouchEvent实现泡泡处理操作 * * @author hejin * */ class MyLocationMapView extends MapView { static PopupOverlay pop = null;// 弹出泡泡图层,点击图标使用 public MyLocationMapView(Context context) { super(context); } public MyLocationMapView(Context context, AttributeSet attrs) { super(context, attrs); } public MyLocationMapView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent event) { if (!super.onTouchEvent(event)) { // 消隐泡泡 if (pop != null && event.getAction() == MotionEvent.ACTION_UP) pop.hidePop(); } return true; } }