如何根据我的应用程序启动和停止GPS?

时间:2011-07-25 06:28:43

标签: android

每当我启动Android时,我都想实现 应用程序,那个时候我想启动gps,

每当我关闭 应用程序,我想在设备中停止gps。如何实施 我的申请中的这个概念?

3 个答案:

答案 0 :(得分:2)

最重要的是删除活动的所有onPause方法中的LocationListener。然后,您可以在onResume方法中重新开始监听。

如果您未在onPause方法中删除侦听器,即使您的应用在后台暂停,GPS也会处于活动状态。有关详细信息,请参阅activity lifecycle

答案 1 :(得分:1)

John,你需要使用LocationManager类。这是一个tutorial on how to get the users location

答案 2 :(得分:1)

首先在应用程序中添加类和接口。

   public class GPSManager
    {
        private static final int gpsMinTime = 500;
        private static final int gpsMinDistance = 0;

        private LocationManager locationManager = null;
        private LocationListener locationListener = null;
        private GPSCallback gpsCallback = null;

        public GPSManager()
        {
            locationListener = new LocationListener()
            {
                public void onProviderDisabled(final String provider)
                {
                }

                public void onProviderEnabled(final String provider)
                {
                }

                public void onStatusChanged(final String provider, final int status, final Bundle extras)
                {
                }

                public void onLocationChanged(final Location location)
                {
                    if (location != null && gpsCallback != null)
                    {
                        Log.e("if location "+location,"if gpscallback"+gpsCallback);
                        gpsCallback.onGPSUpdate(location);
                    }
                    else{
                        Log.e("else location "+location,"else gpscallback"+gpsCallback);
                    }
                }
            };
        }

        public void startListening(final Activity activity)
        {
            if (locationManager == null)
            {
                locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
            }

            final Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(false);
            criteria.setBearingRequired(false);
            criteria.setCostAllowed(true);
            criteria.setPowerRequirement(Criteria.POWER_LOW);

            final String bestProvider = locationManager.getBestProvider(criteria, true);

            if (bestProvider != null && bestProvider.length() > 0)
            {
                locationManager.requestLocationUpdates(bestProvider, GPSManager.gpsMinTime,
                        GPSManager.gpsMinDistance, locationListener);
            }
            else
            {
                final List<String> providers = locationManager.getProviders(true);

                for (final String provider : providers)
                {
                    locationManager.requestLocationUpdates(provider, GPSManager.gpsMinTime,
                            GPSManager.gpsMinDistance, locationListener);
                }
            }
        }

        public void stopListening()
        {
            try
            {
                if (locationManager != null && locationListener != null)
                {
                    locationManager.removeUpdates(locationListener);
                }

                locationManager = null;
            }
            catch (final Exception ex)
            {

            }
        }

        public void setGPSCallback(final GPSCallback gpsCallback)
        {
            this.gpsCallback = gpsCallback;
        }

        public GPSCallback getGPSCallback()
        {
            return gpsCallback;
        }
  }

接口:

public interface GPSCallback
{
    public abstract void onGPSUpdate(Location location);

}

然后在您的活动中实施此界面,并在您的活动中添加以下代码

gpsmanager=new GPSManager();
        gpsmanager.startListening(YourActicvityname.this);
        gpsmanager.setGPSCallback(this);

要在您要关闭应用程序的位置停止GPS调用gpsmanager.stopListening()