3

私はあなたがそれを開いたときにあなたの場所を取得するアプリを実装しています。アクティビティが作成されたときにのみ取得されるため、は必要ありませんLocationListener。2つの実際のデバイスでテストしています。

まず、を使用して場所を取得しようとしますGPS_PROVIDER。結果がNULLの場合、を使用しますNETWORK_PROVIDER。私は建物の中でそれをテストしているので、GPSプロバイダーを使用して位置を取得することはできないと予想されます。

デバイスの1つで、使用している場所GPS_PROVIDERはNULLであり、NETWORK_PROVIDERは正しい場所を返します。しかし、他のデバイスでは、GPS_PROVIDERを使用している場所はNULLではありませんが、間違っています(現在の都市とは別の都市にあります!)。これは私が使用しているコードです:

private void getPosition() {
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    myloc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(myloc == null)
                myloc = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    if(myloc != null){ 
        Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
        try{
            List<Address> addresses = geoCoder.getFromLocation(myloc.getLatitude(), myloc.getLongitude(), 1);

            if(addresses.size()>0){
                String add = "";
                for(int i=0; i<addresses.get(0).getMaxAddressLineIndex(); i++)
                    add += addresses.get(0).getAddressLine(i)+"\n";
                placeEdit.setText(add);
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

GPSプロバイダーから返された場所が間違っていることをどのように知ることができますか?最初にネットワークプロバイダーを調べ、それがnullの場合はGPSを使用する必要がありますか?このアプリは屋外で使用することになっているので、より正確なので、最初にGPSを使用したいと思います。

ありがとう!

4

1 に答える 1

1

Android ドキュメントの状態として

getLastKnownLocation(String provider)
指定されたプロバイダーから取得された最後の既知の位置修正からのデータを示す Location を返します。

したがって、デバイスが 2 時間前に位置を取得し、その間に新しい修正が得られない場合、Location オブジェクトはその古い位置を返します。使用することをお勧めしますLocationListenerが、一定期間後にリッスンを停止するスレッドを使用することをお勧めします-このアプローチは、衛星の視界が悪い場合や建物の中にいる場合に、デバイスが長時間の修正検索を行うのを防ぎます. LocationListener位置を取得する場合はそれを使用し、そうでない場合は - を使用しますNETWORK_PROVIDER

于 2013-03-01T11:13:18.693 に答える