2011-07-25 124 views
0

我想要實現每當我啓動我的Android應用程序 ,那段時間我要開始GPS,如何根據我的應用程序啓動和停止GPS?

每當我關閉 應用程序,我想阻止全球定位系統設備。如何在我的應用程序中實現這個概念 ?

+0

您應該啓動GPS來執行某種功能,例如獲取用戶的位置。每次應用程序啓動和結束時都不應該啓動它。出於某種原因,您應該在需要時啓動它。你準備做什麼? – Icemanind

+0

@我想要獲取用戶當前的經緯度,從設備開始,所以我需要GPS – John

回答

1

首先添加bellow類和接口到您的應用程序。

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()想關閉應用程序

+0

不要忘記在清單文件中添加權限,並且不要忘記接受答案,如果它可以幫助你的話。 – Abhi

2

最重要的是去除L ocationListener在您的活動的所有onPause方法中。然後,您可以重新啓動onResume方法中的偵聽。

如果您不在onPause方法中刪除偵聽器,即使您的應用在後臺暫停,GPS也將處於活動狀態。請參閱activity lifecycle瞭解更多信息。

相關問題