package com.ch_linghu.fanfoudroid.service; import java.util.List; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; /** * Location Service * * AndroidManifest.xml <code> * <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> * </code> * * TODO: 使用DDMS对模拟器GPS位置进行更新时, 会造成死机现象 * */ public class LocationService implements IService { private static final String TAG = "LocationService"; private LocationManager mLocationManager; private LocationListener mLocationListener = new MyLocationListener(); private String mLocationProvider; private boolean running = false; public LocationService(Context context) { initLocationManager(context); } private void initLocationManager(Context context) { // Acquire a reference to the system Location Manager mLocationManager = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); mLocationProvider = mLocationManager.getBestProvider(new Criteria(), false); } public void startService() { if (!running) { Log.v(TAG, "START LOCATION SERVICE, PROVIDER:" + mLocationProvider); running = true; mLocationManager.requestLocationUpdates(mLocationProvider, 0, 0, mLocationListener); } } public void stopService() { if (running) { Log.v(TAG, "STOP LOCATION SERVICE"); running = false; mLocationManager.removeUpdates(mLocationListener); } } /** * @return the last known location for the provider, or null */ public Location getLastKnownLocation() { return mLocationManager.getLastKnownLocation(mLocationProvider); } private class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub Log.v(TAG, "LOCATION CHANGED TO: " + location.toString()); } @Override public void onProviderDisabled(String provider) { Log.v(TAG, "PROVIDER DISABLED " + provider); // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { Log.v(TAG, "PROVIDER ENABLED " + provider); // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub Log.v(TAG, "STATUS CHANGED: " + provider + " " + status); } } // Only for debug public void logAllProviders() { // List all providers: List<String> providers = mLocationManager.getAllProviders(); Log.v(TAG, "LIST ALL PROVIDERS:"); for (String provider : providers) { boolean isEnabled = mLocationManager.isProviderEnabled(provider); Log.v(TAG, "Provider " + provider + ": " + isEnabled); } } // only for debug public static LocationService test(Context context) { LocationService ls = new LocationService(context); ls.startService(); ls.logAllProviders(); Location local = ls.getLastKnownLocation(); if (local != null) { Log.v("LDS", ls.getLastKnownLocation().toString()); } return ls; } }