0

Xamarin モバイル (MonoDroid) で構築している Android アプリがあります。アプリは、現在のユーザーの GPS 座標を取得する必要があります。残念ながら、PositionChangedイベントを発生させることができないようです。

private Geolocator geolocator = null;
private void InitializeStuff()
{
  geolocator = new Geolocator(this) { DesiredAccuracy = 1 };          
  if (geolocator.IsGeolocationEnabled == false)
    statusTextView.Text = "Please allow this application to access your location.";                 
  else if (geolocator.IsGeolocationAvailable == false)
    statusTextView.Text = "Your location could not be determined.";     
  else
    statusTextView.Text = "Ready.";

  geolocator.PositionChanged += geolocator_PositionChanged;

  myButton.Click += myButton_Click;
}

private void myButton_Click(object sender, EventArgs e)
{
  statusTextView.Text = "Getting position...";
  if ((geolocator != null) && (geolocator.IsListening == true))
    geolocator.StartListening(minTime: 1000, minDistance: 0);
}

private void geolocator_PositionChanged(object sender, PositionEventArgs e)
{
  RunOnUiThread(() =>
  {
    statusTextView.Text = "Lat: " + e.Position.Latitude.ToString("N6") + ", Long: " + e.Position.Longitude.ToString("N6");
  });
}

「位置を取得しています...」と言っているところまでアプリを正常に取得できます。ただし、PositionChangedイベントは発生しません。Android デバイスを持っていないため、Android エミュレーターでアプリをテストしています。私は、エミュレーターにテネットすることによって、この機能をテストしています。次に、次のコマンドを入力します。

geo fix -73.985708 40

コマンド ウィンドウに「OK」と表示されます。ただし、PositionChangedイベントは発生しません。私のエミュレータは Android 2.2 エミュレータです。あなたが提供できる洞察をありがとう。

4

1 に答える 1

0

myButton_Clickif ステートメントの条件がハンドラーで間違っていると思われます。

if ((geolocator != null) && (geolocator.IsListening == true))

上記は、ジオロケーターが null ではなく、リッスンしている場合、位置の変更のリッスンを開始することを意味します。それを次のように変更すると:

if ((geolocator != null) && (geolocator.IsListening != true))

期待どおりに動作するはずです。

編集: また、2 つの条件を括弧で囲む必要はなく、次のように記述できます。

if (geolocator != null && geolocator.IsListening == true)
于 2013-05-06T18:03:52.230 に答える