0

このコードを数回ソートしようとしました。これまでに試したシナリオは次のとおりです…</p>

シナリオ: アクティビティが開始されたら、ネットワーク/GPS プロバイダーに基づいて座標 (経度と緯度) を取得したいと考えています。これはバックグラウンドで実行され、long & lat が null または「0.0」でなくなるまでチェックを続ける必要があります。したがって、私は AsyncTask で次のコードを試し、それによって doInBackground メソッドで LocationListener を使用しました。

ソースコード:

public class GetLocation extends AsyncTask<String, String, String>
{  
    private myTest test;
    boolean running =true;
    private Context cont;
    String addressString;

            public GetLocation(myTest fr, Context contxt)
            {
                test = fr;
                cont = contxt;
            }

            @Override
            protected void onPreExecute()
            {  
                super.onPreExecute();                   

            } 

            @Override 
            protected void onProgressUpdate(String... values) {
                super.onProgressUpdate(values);

             }

            @Override 
            protected void onPostExecute(String result)
            {   
                test.GetContent();
            }

            @Override
            protected String doInBackground(String... params) {
                Looper.myLooper().prepare();

                LocationManager locationManager;
                locationManager = (LocationManager) cont
                        .getSystemService(Context.LOCATION_SERVICE);

                Criteria crta = new Criteria();
                crta.setAccuracy(Criteria.ACCURACY_FINE);
                crta.setAltitudeRequired(false);
                crta.setBearingRequired(false);
                crta.setCostAllowed(true);
                crta.setPowerRequirement(Criteria.POWER_LOW);
                String provider = locationManager.getBestProvider(crta, true);

                Location location = locationManager.getLastKnownLocation(provider);
                updateWithNewLocation(location);
                LocationListener locationListener = new LocationListener() {

                    @Override
                    public void onLocationChanged(Location location) {
                        updateWithNewLocation(location);
                    }

                    @Override
                    public void onProviderDisabled(String provider) {
                        updateWithNewLocation(null);
                    }

                    @Override
                    public void onProviderEnabled(String provider) {
                    }

                    @Override
                    public void onStatusChanged(String provider, int status,
                            Bundle extras) {
                    }

                };

                locationManager.requestLocationUpdates(provider, 0, 0,
                        locationListener);
                Looper.loop();

                return addressString;
            }

            private void updateWithNewLocation(Location location) { 

                Constants.lat = Double.toString(location.getLatitude());
            Constants.long = Double.toString(location.getLongitude());        

          }
 }

問題: ただし、ルーパーがスレッドをアクティブに保つのに役立つことも知っています。有効な座標を取得できるようにしたいのですが、これは受信されるまでループする必要があります。有効な場所が受信されるまで、何度も場所を取得するために呼び出すにはどうすればよいですか? (私が提供したループ内に条件を入れることはできますが、これを達成するためにどのように、どのメソッドを呼び出せばよいかわかりません)。可能であれば、コード スニペットを提供してください。

乾杯!

4

2 に答える 2