0

私は場所を取得しようとしていますが、コードは機能しますが、正しく機能しません。これが私のコードです

    // Get the location manager
    LocationManager locationManager = (LocationManager)                 
    getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(bestProvider);

    try {
        lat =  (int)Math.round((location.getLatitude () * 1e6) ) ;
        lon =   (int)Math.round((location.getLongitude() * 1e6) ) ;
    }
    catch (NullPointerException e){
        lat = -1;
        lon = -1;
    }

問題は、私が foursqure または facebook を使用して場所を直接取得するときに、アプリケーションが -1、-1 (時々) を返し、場所を正確に見つけることです。何が問題なのか、または現在の場所をより良くするためにどのように改善できますか?? ありがとう

4

2 に答える 2

0

Andorid のドキュメントで指定されているように、getLastKnownLocation の呼び出しで null が返されることがあります。そのため、そのコードが実際に lat=lon=-1 を生成することがあります。また、getBestProvider は、指定された基準を最もよく満たすプロバイダーを決定する方法です。基準を指定していないため、論理的な結論は、すべてのプロバイダーが同等に優れているため、結果がランダムになる可能性があるということです。最後に、lat=-1 と lon=-1 は有効な場所であるため、一般にエラーのフラグを立てるには適していないことに注意してください。

ここの別の回答で示唆されているように、http://developer.android.com/reference/android/location/LocationListener.htmlを実装する必要があります。次に、どのプロバイダーを使用するかという問題があります。私のアプローチは、それらすべてを使用し、単純なカルマン フィルターを使用して、異なる時期に異なるプロバイダーが異なるレベルの精度を持っているという事実を処理することです。これに使用する単純なカルマン フィルターをここに投稿しましたSmooth GPS data

于 2013-04-22T07:18:47.327 に答える