如何获取位置纬度和经度并从后台服务更新

时间:2011-09-16 10:47:02

标签: android latitude-longitude locationmanager

我正在研究示例应用程序。在这个应用程序中,我想获得更新的位置纬度和经度,当用户在一个方向上移动Android移动。我已经实现了如下位置管理器类:

 private LocationManager locationManager;
 private LocationListener locationListener;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

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

    locationListener = new GPSLocationListener();

    locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 
        0, 
        0, 
        locationListener);
    }

       private class GPSLocationListener implements LocationListener 
{
    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
       Toast.makeText(getBaseContext(), 
                    "Latitude: " + location.getLatitude() + 
                    " Longitude: " + location.getLongitude(), 
                    Toast.LENGTH_SHORT).show();
           }
        } 

}

如何从背景获取更新的位置纬度和经度?

请任何人帮助我。

2 个答案:

答案 0 :(得分:3)

您需要在服务中“实施”'LocationListener'。

查看http://androidgps.blogspot.com/2008/09/simple-android-tracklogging-service.html

答案 1 :(得分:2)

如果您打算在应用程序未运行时获取纬度和经度,则可以使用在后台获取经度和纬度的服务,并执行您想要的任何任务。并且不要忘记在不需要时删除更新,因为在设备电池使用方面获取更新是非常昂贵的操作。

还有一点,您不需要检查空值的位置,因为只有在您的提供商获取位置时才会调用onLocationChanged()。

虽然我也是android新手。这可能对你有所帮助。你必须看到android文档这些Service类方法实际上做什么以及何时调用它们。 这不是完整的代码。你自己实现了locationlistener。这只是一个显示正常类的示例程序:

import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class BackService extends Service {

private MyTimerTask mTimerTask;
private Timer mTimer;

@Override
public void onCreate() {
    mTimer = new Timer();
    mTimerTask = new MyTimerTask();
} 
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    mTimer.schedule(mTimerTask, 0, 500);
    Log.d("onStartCommand","onStartCommand called...");
    return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

private class MyTimerTask extends TimerTask {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        Log.i("BackService","BackService is running...");
        doSomethingWithLocation();
    }

}


}