Android:不间断的位置计算

时间:2011-03-06 09:56:41

标签: android gps location

我目前正在做一个机器人项目,我决定驾驶我的机器人,这要归功于Android手机(三星Galaxy S)。我的问题是我找不到“每次”计算GPS位置的方法,我的意思是,驾驶需要非常小的刷新时间,而我无法得到它。起初,我以为我只需要这样做:

mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.refreshTime, 0, this);

如果refreshTime是一个变量瞬间值,例如,但是它不起作用,因为我注意到这个值只是一个提示,而不是一个真正的参数。所以我迷路了^^

有没有办法做到这一点?

我在这个主题中获益于问你一个问题......你知道为什么我设置GPS_PROVIDER时我的位置没有被计算出来吗?我的卫星已开启,但没有任何返回,所以我猜我做错了......

这是我的完整代码:

package com.pIndus.gps;

import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class Loc extends Activity {
    /** Called when the activity is first created. */

private long refreshTime = 1000;
private LocationManager mLocManager;
private LocationListener mLocListener;

@Override
public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    /* Use the LocationManager class to obtain GPS locations */

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

    mLocListener = new MyLocationListener();

    mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.refreshTime, 0, mLocListener);

}

/* Class My Location Listener */

public class MyLocationListener implements LocationListener

{



    @Override
    public void onProviderDisabled(String provider)
    {

        Toast.makeText( getApplicationContext(), "Gps désactivé", Toast.LENGTH_SHORT ).show();
        Log.i("GPS", "GPS Desactivé");

    }

    @Override
    public void onProviderEnabled(String provider)
    {

        Toast.makeText( getApplicationContext(),"Gps activé", Toast.LENGTH_SHORT).show();
        Log.i("GPS", "GPS Activé");

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    {
        Toast.makeText( getApplicationContext(),"Statut changé", Toast.LENGTH_SHORT).show();
        Log.i("GPS", "Statut changé");
    }

    @Override
    public void onLocationChanged(Location loc)

    {

        loc.getLatitude();

        loc.getLongitude();

        String Text = "Localisation courante:\n " + "Latitude : " + loc.getLatitude() + "\n" + "Longitude : " + loc.getLongitude();

        Log.i("GPS", "Localisation calculée");

        Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();

    }





}



public void onPause()
{
    mLocManager.removeUpdates(mLocListener);
    super.onPause();
}

public void onStop()
{
    mLocManager.removeUpdates(mLocListener);
    super.onStop();
}

}

希望你们了解我,我知道我的英语非常糟糕。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

我认为你的频率不会超过1Hz ... GPS接收器芯片通常会定期在串行线上发送测量值(逻辑上),因此没有办法告诉它“我想要一个位置,现在“。这个常规间隔也是可调节的,但操作系统似乎不太可能将其调整到比1Hz小得多的值,只是因为有些应用要求。

然而,由于GPS修复无论如何都不准确,这似乎不是一个大问题。 (除非你正在建造一架喷射动力的机器人飞机,在半秒内飞行200米,当然:))

我建议使用卡尔曼滤波器或类似方法根据先前的修正和速度推断位置。 (如果您从其他传感器,电机控制等添加更多信息,这个估计可能比通过每秒10次测量GPS位置所获得的更好。)