2017-01-02 83 views
0

我想在Android中每10秒鐘後定期使用後臺服務獲取當前位置的緯度和經度。獲取當前位置經緯度在android中使用後臺服務

+1

對不起,但哪裏有問題? –

+0

「我想通過後臺服務獲得當前的經度和緯度」----我怎樣才能獲得?這是我的問題 – suman

+1

請做你自己的研究。我相信谷歌充滿了關於這個主題的信息 –

回答

0

首先,你必須寫一個服務:

public class MyService extends Service { 

    Timer timer; 
    Handler yardimci; 

    public static long TIME = 10000; 

    private GPSControlService gpsControlService; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     gpsControlService = new GPSControlService(this) { 
      @Override 
      public void findLocationCompleted(Location location) { 
       Log.i("Service", location.getLatitude() + " - " + location.getLongitude() + " - " + location.getAccuracy()); 
      } 
     }; 
     timer = new Timer(); 
     yardimci = new Handler(Looper.getMainLooper()); 

     timer.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       Log.i("Service", "GPS controlled"); 
       gpsControl(); 
      } 
     }, 0, TIME); 

    } 

    private void gpsControl() { 
     yardimci.post(new Runnable() { 
      @Override 
      public void run() { 
       gpsControlService.run(); 
      } 
     }); 
    } 

    @Override 
    public void onDestroy() { 
     timer.cancel(); 
     super.onDestroy(); 
    } 

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

GPSControlService:

public class GPSControlService { 

    private GPSModule gpsModule; 

    public GPSControlService(Service service) { 

     gpsModule = new GPSModule(service); 
    } 

    public void run(){ 
     if (gpsModule.canGetLocation()) { 

      if (gpsModule.getLocation() != null) { 
       findLocationCompleted(gpsModule.getLocation()); 
      } 

      gpsModule.stopUsingGPS(); 
     } 
    } 

    public void stop(){ 
     gpsModule.stopUsingGPS(); 
    } 

    public void findLocationCompleted(Location location){} 
} 

我需要寫一個GPSModule 當LocationListener的植入,它會找出位置,它發出的位置用getLocation()方法

public Location getLocation() { 
// return location 
} 
0

你可以使用位置監聽器來做到這一點。

private class MyLocationListener implements LocationListener { 

    public void onLocationChanged(Location location) { 
     String message = String.format(
       "New Location \n Longitude: %1$s \n Latitude: %2$s", 
       location.getLongitude(), location.getLatitude()); 

     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 

     Toast.makeText(DirectionActivity.this, message,Toast.LENGTH_LONG).show(); 
    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
     Toast.makeText(DirectionActivity.this, "Provider status changed", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderDisabled(String s) { 
     Toast.makeText(DirectionActivity.this, 
       "Provider disabled by the user. GPS turned off", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderEnabled(String s) { 
     Toast.makeText(DirectionActivity.this, 
       "Provider enabled by the user. GPS turned on", 
       Toast.LENGTH_LONG).show(); 
    } 
} 

您可以通過

private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds 


LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, 
      MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener()); 
0

調用此有可寫的後臺服務來獲取位置。但不建議這樣做,因爲它會大幅耗盡電池電量。

一旦應用程序在前臺運行,強烈建議使用位置服務。

必須知道位置監聽器是如何工作的?

有兩個參數 - 一次和
要獲得位置的其他最小距離。比方說時間= 10秒, 距離= 1000米。位置偵聽器將以最小參數返回您的位置。如果用戶不移動,位置將在10秒內更新。如果用戶在10秒內移動2000米,那麼位置將在每1000米更新一次。

+0

我需要更新當前經緯度,甚至應用程序已關閉。這是我在項目中的主要工作,所以必須實現它。 – suman

+0

請分享任何示例代碼 – suman

相關問題