0

私はこのようなアプリケーションを作りたい:

ユーザーがボタンをクリック アプリケーションがユーザーの座標 (緯度と経度) を表示

私はここの手順に従っています

// Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

    // Define a listener that responds to location updates
    LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
          // Called when a new location is found by the network location provider.
          double glat = location.getLatitude();
          double glong = location.getLongitude();
          Toast.makeText(getApplicationContext(), "Your position\n"+glat+"\n"+glong, Toast.LENGTH_LONG).show();
        }
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        @Override
        public void onProviderEnabled(String provider) {}
        @Override
        public void onProviderDisabled(String provider) {}
      };

    // Register the listener with the Location Manager to receive location updates
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

ボタンクリックイベントに実装する方法は?

ユーザーがボタンをクリックすると、位置を示すトーストが表示されます:)

アップデート

startActivityForResult() を使用して実装しますが、結果は空または null です。ここに私のコードがあります:

これは、クリックしたいボタンのコードです

btn_obj_useKor.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View arg0) {             
     Intent intent = new Intent(getApplicationContext(), MyLocationListener.class);
     startActivityForResult(intent, 0);
   }
});

これは私の MyLocationListener クラスです:

public class MyLocationListener extends Activity{

    Intent intent;
    String output = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();

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

        LocationListener locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                double glat = location.getLatitude();
                double glong = location.getLongitude();
                output = glat+","+glong;                
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {}
            @Override
            public void onProviderEnabled(String provider) {}
            @Override
            public void onProviderDisabled(String provider) {}
        };

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

        intent.putExtra("returnedData", output);
        setResult(RESULT_OK, intent);
        finish();
    }

}

ボタンをクリックすると、WTF が表示されます。これは、結果が null または空であることを意味します。

何が問題で、どうすればいいですか?

4

2 に答える 2

0

onClickへの応答はユーザーイベントであり、LocationListeneronLocationChangedもイベントです。LocationListenerイベントの前にユーザーイベントをトリガーすると、表示できる位置がなくなります。

私の提案は、ボタンonClickハンドラーの別のアクティビティでstartActivityForResultを呼び出すことです。2番目のアクティビティにはすべてのLocationManagerとLocationListenerコードが含まれ、onLocationChangedイベントハンドラーで位置を最初のアクティビティに戻します。

于 2011-06-22T11:35:57.653 に答える
0

GPS プロバイダーが起動して現在地を見つけるには時間がかかるため、すぐに結果が返されることはありません。これが、コールバック イベントをリッスンする理由です。

現在、コードはネットワークの場所をリッスンしていますが、これはあまり正確ではありません。LocationManager を GPS_Provider (最後の行で) に変更して、有効になっている場合は GPS を使用します。

于 2011-06-22T11:22:52.140 に答える