2017-01-02 2 views
0

アンドロイドで10秒ごとに定期的にバックグラウンドサービスを使用して現在地を取得したいと考えています。現在地を取得するアンドロイドのバックグラウンドサービスを使用して緯度と経度を入力してください

+1

申し訳ありませんが、質問はどこですか? –

+0

"バックグラウンドサービスを通じて現在の緯度と経度が必要" ----それは私の質問です – suman

+1

あなた自身の研究をしてください。 Googleはこのトピックに関する情報がいっぱいです –

答えて

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){} 
} 

を私はLocationListenerを注入し、それが場所を見つけている場合はGPSModule を記述する必要が、それは場所を送信しますgetLocation()メソッドを使用して

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

このためにLocation Listenerを使用します。

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

ことで、これを呼び出すことができます。しかし、バッテリーを大幅に消耗するので、そうすることはお勧めしません。

アプリケーションがフォアグラウンドで実行されると、位置情報サービスを使用することを強くお勧めします。

ロケーションリスナーはどのように機能するのでしょうか?

2つのパラメータがあります.1回と
場所を取得するためのその他の最小距離です。時間= 10秒、 距離= 1000メートルとしましょう。ロケーションリスナーは、最小パラメータでロケーションを返します。ユーザーが移動しない場合、位置は10秒で更新されます。ユーザーが10秒間に2000メートル移動すると、1000メートルごとに位置が更新されます。

+0

私は現在のlatを更新する必要があります。これはプロジェクトの主な仕事です。それを実装する必要があります。 – suman

+0

サンプルコードを親切に共有 – suman

関連する問題