2014-10-31 17 views
0

我正在開發時正常工作的GPS應用程序,但是當我將其最小化並打開其他某個應用程序時,它不會連續提供經度和緯度,並且在關閉其他應用程序時應用程序並運行這個單一的應用程序,然後它給出準確的結果任何人有任何想法然後請幫助我..當它最小化並打開另一個應用程序時中斷了Android應用程序

+0

發佈您的代碼你做了什麼 – 2014-10-31 05:55:50

回答

0

你應該使用service在後臺運行。當你打開其他應用程序,而不是它的GPS應用程序將停止暫停方法。之後停止方法。當你重新打開它時,它會調用重啓方法。

所以我認爲你必須使用gps lat和lng服務。服務將不斷在後臺運行。

0

好吧!這僅僅是因爲你在後臺模式下的活動。當你最小化你的應用程序時,意味着調用了stop()方法,然後停止了你的Activity。

解決方案

對於這種情況,你必須使用該服務這樣的例子

public class LocationService extends Service implements LocationListener{ 

    //public static final String BROADCAST_ACTION = "Hello World"; 
    private static final int TWO_MINUTES = 1000 * 60 * 2; 
    public LocationManager locationManager; 
    public Location previousBestLocation = null; 

    Intent intent; 
    int counter = 0; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     //intent = new Intent(BROADCAST_ACTION); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 20000, 0, this); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,20000, 0, this); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    protected boolean isBetterLocation(Location location,Location currentBestLocation) { 
     if (currentBestLocation == null) { 
      // A new location is always better than no location 
      return true; 
     } 
     // Check whether the new location fix is newer or older 
     long timeDelta = location.getTime() - currentBestLocation.getTime(); 
     boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; 
     boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; 
     boolean isNewer = timeDelta > 0; 

     // If it's been more than two minutes since the current location, use 
     // the new location 
     // because the user has likely moved 
     if (isSignificantlyNewer) { 
      return true; 
      // If the new location is more than two minutes older, it must be 
      // worse 
     } else if (isSignificantlyOlder) { 
      return false; 
     } 

     // Check whether the new location fix is more or less accurate 
     int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); 
     boolean isLessAccurate = accuracyDelta > 0; 
     boolean isMoreAccurate = accuracyDelta < 0; 
     boolean isSignificantlyLessAccurate = accuracyDelta > 200; 

     // Check if the old and new location are from the same provider 
     boolean isFromSameProvider = isSameProvider(location.getProvider(),currentBestLocation.getProvider()); 

     // Determine location quality using a combination of timeliness and 
     // accuracy 
     if (isMoreAccurate) { 
      return true; 
     } else if (isNewer && !isLessAccurate) { 
      return true; 
     } else if (isNewer && !isSignificantlyLessAccurate 
       && isFromSameProvider) { 
      return true; 
     } 
     return false; 
    } 

    /** Checks whether two providers are the same */ 
    private boolean isSameProvider(String provider1, String provider2) { 
     if (provider1 == null) { 
      return provider2 == null; 
     } 
     return provider1.equals(provider2); 
    } 

    @Override 
    public void onDestroy() { 
     // handler.removeCallbacks(sendUpdatesToUI); 
     super.onDestroy(); 
     Log.v("STOP_SERVICE", "DONE"); 
     locationManager.removeUpdates(this); 
    } 

    public static Thread performOnBackgroundThread(final Runnable runnable) { 
     final Thread t = new Thread() { 
      @Override 
      public void run() { 
       try { 
        runnable.run(); 
       } finally { } 
      } 
     }; 
     t.start(); 
     return t; 
    } 

    @Override 
    public void onLocationChanged(Location loc) { 
     // TODO Auto-generated method stub 
     Log.i("***", "Location changed"); 
     if (isBetterLocation(loc, previousBestLocation)) { 
      double latI = loc.getLatitude(); 
      double longI = loc.getLongitude(); 
      //Put Data into shared prefrence 
      SharedPreferences sharedPreferences = getSharedPreferences(ApplicationCardinality.PREF_NAME, MODE_PRIVATE);; 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putString("gpsLatitude", ""+latI); 
      editor.putString("gpsLongitude", ""+longI); 
      editor.commit(); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Gps Enabled",Toast.LENGTH_SHORT).show(); 
    } 

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

} 
+0

沒有!不是這樣的時候,我在Genymotion測試它運行良好..但我測試在Android移動然後...開始和最小化,現在如果沒有任何應用程序像Facebook和鉻打開..然後結果被打斷... – Naresh 2014-10-31 07:24:09

相關問題