package com.smartdot.cgt.util; import android.content.Context; import android.content.Intent; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Bundle; import com.smartdot.cgt.R; public class GpsManager { private static final Object gpsStartLock = new Object(); // private int notInPostCount = 0; private static GpsManager gpsSingerton; public static GpsManager getGpsSingerton() { synchronized (gpsStartLock) { if (gpsSingerton == null) { gpsSingerton = new GpsManager(); } return gpsSingerton; } } private static LocationManager locationManager; public Location getLocation() { Location location = null; if (locationManager != null) { boolean isGpsOpened = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); if (isGpsOpened) { location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); } if (location == null) { if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } else { location = null; } } } return location; } private GpsManager() { } public void startGps(final Context context) { String locationServiceName = Context.LOCATION_SERVICE; locationManager = (LocationManager) context.getSystemService(locationServiceName); boolean isGpsOpened = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // boolean isNetworkOpened = // locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGpsOpened) {// || !isNetworkOpened) { Msg.confirm(context, "GPS或无线网络定位尚未打开,是否进入设置页面进行设置?", "设置定位", new MsgCallback() { @Override public void callBack(Boolean result) { if (result.booleanValue()) { context.startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS")); } } }, "设置", "取消"); } int reportLength = ApplicationMain.getInstance().getCgtConfig().getGpsReportLength(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, reportLength, locationListenerGps); // locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, reportLength * 2, // locationListenerNetwork); // LogSD s=new LogSD(getApplicationContext()); } public void stopGps() { locationManager.removeUpdates(locationListenerGps); locationManager.removeUpdates(locationListenerNetwork); } private final LocationListener locationListenerGps = new LocationListener() { private Location lastLocation = null; private int reportTime = ApplicationMain.getInstance().getCgtConfig().getGpsReportTimer() * 1000; @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { if (arg1 == LocationProvider.OUT_OF_SERVICE && !NotificationCreater.isNotificationAvailable(R.drawable.map_case_marker)) { NotificationCreater.createNotification(ApplicationMain.getInstance(), R.drawable.map_case_marker, "GPS不可用", "城管通", "当前GPS不可用!"); } } @Override public void onLocationChanged(Location location) { // if (location.getAccuracy() < 40 // || (lastLocation != null && (location.getAccuracy() - lastLocation.getAccuracy()) < 20)) { // if (lastLocation == null || (location.getTime() - lastLocation.getTime()) > reportTime / 2 // || location.getAccuracy() <= lastLocation.getAccuracy()) { // lastLocation = location; // // // final String phoneNumber = null; // double x = location.getLongitude(), y = location.getLatitude(); // // final String longitude = Double.toString(x); // // final String latitude = Double.toString(y); // // final String userId = ApplicationMain.getInstance().getUserModel().getBgAdminId(); // int isInPost = -1; // PointD[] bgPoints = ApplicationMain.getInstance().getUserModel().getBgPoints(); // if (bgPoints != null && bgPoints.length > 3) { // isInPost = GisUtil.isPointInPolygon(new PointD(x, y), bgPoints) ? 1 : 0; // } // if (isInPost == 0) { // notInPostCount++; // if (notInPostCount > 5) { // if (!NotificationCreater.isNotificationAvailable(R.drawable.btnmylocation)) { // NotificationCreater.createNotification(ApplicationMain.getInstance(), // R.drawable.btnmylocation, "未在岗警告", "城管通", "您已离开责任网格!", false); // } // } // } else { // notInPostCount = 0; // NotificationCreater.closeNotification(ApplicationMain.getInstance(), R.drawable.btnmylocation); // } // final int inPost = isInPost; // Handler handler = new Handler() { // public void handleMessage(Message msg) { // if (msg.arg1 == 0) { // Log.d("ReportGPSLocation", "上报失败"); // } else if (msg.arg1 == -1) { // Log.d("ReportGPSLocation", "上报出错"); // } // }; // }; // BaseThread thread = new BaseThread(handler) { // @Override // public void runThread() { // Message message = this.obtainMessage(); // try { // // message.arg1 = Request.getRequest().reportGpsPosition(phoneNumber, longitude, latitude, // // userId, inPost) ? 1 : 0; // } catch (Exception e1) { // message.arg1 = -1; // } // this.sendMessage(message); // } // }; // thread.start(); // } // } else { // Log.d("ReportGPSLocation", "当前误差为" + location.getAccuracy() + ",上次误差为" // + (lastLocation != null ? lastLocation.getAccuracy() : "空")); // } } @Override public void onProviderDisabled(String arg0) { if (!NotificationCreater.isNotificationAvailable(R.drawable.map_case_marker)) { NotificationCreater.createNotification(ApplicationMain.getInstance(), R.drawable.map_case_marker, "GPS已关闭", "城管通", "当前GPS已关闭,请重新配置!"); } } @Override public void onProviderEnabled(String arg0) { } }; private final LocationListener locationListenerNetwork = new LocationListener() { @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } @Override public void onLocationChanged(Location arg0) { //locationManager.removeUpdates(this); } @Override public void onProviderDisabled(String arg0) { } @Override public void onProviderEnabled(String arg0) { } }; public static LocationManager getLocationManager() { return locationManager; } public void setLocationManager(LocationManager locationManager) { this.locationManager = locationManager; } }