2017-01-02 98 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

相关问题