Проблема с LocationListener Network_provider в Android - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть приложение, которое реализует LocationListener с использованием Network_Provider и onLocationChanged (), я записываю новое местоположение в файл журнала с отметкой времени.Это приложение запускается как служба.

Я вижу необычное поведение с этим:

  1. кажется, что он захватывает местоположение только из местоположения Wi-Fi (без сотовой связи)

  2. как только служба запущена, она ждет, пока не найдет первое местоположение Wi-Fi.До этого он ничего не регистрирует.

  3. как только он находит местоположение через Wi-Fi, он начинает регистрировать местоположение широта / долгота

  4. эта регистрация продолжается после этого каждые 45 секунд,даже если местоположение не изменилось ..

  5. эта регистрация продолжается после этого, каждые 45 секунд, даже если устройство перемещается за пределы зоны действия этого Wi-Fi, фактически из моего дома вработа @ 20 миль (без Wi-Fi на работе), и он продолжает регистрировать одно и то же местоположение каждые 45 секунд.

странно?

Вот мой код:

public class TestLocationService extends Service implements LocationListener {

    LocationManager lm;
    public TestLocationService() {
     }

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

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        String loc= "Time : "+new Date()+"\n";
        loc += "New Location "+location.getLatitude()+" and "+location.getLongitude()+"\n*******************\n";
        System.out.println(loc);
          try {
                File sdCard = Environment.getExternalStorageDirectory();
                File dir = new File (sdCard.getAbsolutePath() + "/loc");
                dir.mkdirs();
                File file = new File(dir, "loc.txt");
                FileOutputStream fOut = new FileOutputStream(file,true);
                OutputStreamWriter osw = new OutputStreamWriter(fOut);  
                osw.write(loc);
                osw.flush();
                osw.close();                
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
     public void onCreate() {
        this.lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        this.lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    }


}

-abhay

1 Ответ

0 голосов
/ 29 ноября 2011

Изменить это:

this.lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

по:

this.lm.requestLocationUpdates(this.lm.getBestProvider(new Criteria(),true),0,0,this);

В этом случае ваш телефон будет использовать лучший включенный поставщик

...