使用android中的后台服务获取当前位置纬度和经度

时间:2017-01-02 11:56:43

标签: android service gps

我希望在android中每10秒钟后定期使用后台服务获取当前位置的纬度和经度。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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());

答案 2 :(得分:0)

可以编写后台服务来获取位置。但是不建议这样做,因为它会大大耗尽电池。

强烈建议在应用程序在前台运行时使用位置服务。

必须知道位置监听器如何工作?

有两个参数 - 一次和
其他最小距离得到位置。我们说时间= 10秒钟 距离= 1000米。位置监听器将返回最小参数的位置。如果用户未移动,该位置将在10秒内更新。如果用户在10秒内移动2000米,则位置将在每1000米处更新。