0

LocationManager.NETWORK_PROVIDER を使用してユーザーの場所を取得しようとしていますが、常に空白の文字列が返されます。たまにしか有効なデータを取得できません。場所がわかるまでこのメソッドを繰り返す方法はありますか? 場所はすぐに来て、この方法は必要ないと思います。空白の文字列が表示されなくなるまで再呼び出しを試みましたが、何も表示されません。

これが私が呼び出すメソッドです

   public String getLocation(Locale locale, Context context, boolean city, boolean postal, boolean state_prov) throws IOException{
       LocationManager locMan = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
       LocationListener locList = new MyLocList();
       Geocoder gC = new Geocoder(context,locale);
       Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);
       locMan.requestLocationUpdates(locMan.NETWORK_PROVIDER, 500, 200, locList);
       Location networkLocation = locMan.getLastKnownLocation(locMan.NETWORK_PROVIDER);
       if (city)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getSubAdminArea());
       else if (postal)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getPostalCode());
       else if (state_prov)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getAdminArea());
       else
           return "Nothing";
    }

私は通常、市区町村または郵便番号を尋ねますが、ほとんどの場合、何も入力されません。を使用して

    Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);

NullPointer になるので、NETWORK_PROVIDER を使用しています。

これらの権限を設定しました:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

そして、これは私がそれを呼んでいるものです

    String data = getLocation(Locale.getDefault(),getBaseContext(),true,false,false);

結果として空の文字列を取得し続けます。

都市を受信しないことについて以前に質問しましたが、現在はデータが送信されていないようです。

4

1 に答える 1

1

あなたのコードでは、「現在の場所」ではなく、「最後の既知の場所」を求めています。他のアプリケーションが以前に場所を要求し、そのアプリケーションと同じ結果が得られました。アプリケーションを起動する前に位置情報のリクエストがなかった場合、「最後に認識された位置」は null になります。

正しい方法は、リスナーを登録し、位置情報の更新が到着するのを待つことです。結果は「最後の既知の場所」として保存されます。

この回答はあなたを助けるはずです: Androidでユーザーの現在の場所を取得する最も簡単で最も堅牢な方法は何ですか?

編集:明確にするために、上記のリンクに記載されている MyLocation クラスの適切な使用法を次に示します。すぐに場所を取得することはできません。代わりにコードをコールバック メソッドに配置すると、場所データが利用可能になったときに呼び出されます。

LocationResult locationResult = new LocationResult(){
    @Override
    public void gotLocation(Location location){
        //Got the location!
        //Here goes your code
        //This method will be called when location data arrive
    }
};
MyLocation myLocation = new MyLocation();
myLocation.getLocation(this, locationResult);
于 2012-08-22T21:34:11.143 に答える