Android: безостановочный расчет местоположения - PullRequest
0 голосов
/ 06 марта 2011

Я сейчас занимаюсь проектом робототехники и решил управлять своими роботами благодаря телефону Android (Samsung Galaxy S). Моя проблема в том, что я не могу найти способ вычислить местоположение GPS "каждый раз", я имею в виду, что вождение требует очень маленького времени обновления, и я не могу его получить. Сначала я подумал, что нужно просто поставить что-то вроде этого:

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

С refreshTime является переменным моментом, значения которого равны, например, 500, но он не работает, так как я заметил, что это значение является лишь подсказкой, а не параметром. Так что я заблудился ^^

Есть ли способ сделать это?

Я получаю прибыль в этой теме, чтобы задать вам вопрос ... Знаете ли вы, ребята, почему мое местоположение не вычисляется, когда я устанавливаю 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 Ответ

2 голосов
/ 06 марта 2011

Я не думаю, что вы можете получить намного большую частоту, чем 1 Гц ... Чипы GPS-приемника обычно посылают измерения (логически) по последовательной линии через равные промежутки времени, поэтому нет возможности сказать это "Я хочу местоположение, СЕЙЧАС".Этот регулярный интервал тоже можно регулировать, но кажется маловероятным, что ОС хочет настроить его на гораздо меньшее значение, чем 1 Гц, только потому, что запрашивается какое-то приложение.

Однако, поскольку GPS-исправления не настолько точныв любом случае, это не кажется такой большой проблемой.(Если, конечно, вы не строите реактивный самолет-робот, который летит 200 метров за полсекунды:))

Я бы предложил использовать фильтр Калмана или аналогичный метод для экстраполяции позиции на основепредыдущие исправления и скорость.(Если вы добавите дополнительную информацию от других датчиков, управления двигателем и т. Д., Эта оценка может оказаться намного лучше, чем та, которую вы могли бы получить, измеряя положение GPS 10 раз в секунду.)

...