2016-04-08 16 views
0

私はxamarinを使ってネイティブアンドロイドアプリを構築しています。問題は、アプリケーションがエミュレータ上で座標を完全に収集して表示することですが、スマートフォン(2台のサムスンの携帯電話を試しました)に置くと、現在のアドレスを判別できません。余分な情報のデータと場所がオンになっているので、どこに問題があるのか​​分かりません。ご協力いただきありがとうございます。ここにあなたの携帯電話は、おそらく今、あなたは、位置情報サービスのための許可を求めることを必要としマシュマロを実行しているhttps://developer.xamarin.com/recipes/android/os_device_resources/gps/get_current_device_location/GPS座標を収集する

[Activity(Label = "NewRoute")] 
    public class NewRouteActivity : Activity, ILocationListener 
    { 

     static readonly string TAG = "X:" + typeof(NewRouteActivity).Name; 
     TextView _addressText; 
     Location _currentLocation; 
     LocationManager _locationManager; 

     string _locationProvider; 
     TextView _locationText; 


     public async void OnLocationChanged(Location location) { 
      _currentLocation = location; 
      if (_currentLocation == null) 
      { 
       _locationText.Text = "Unable to determine your location. Try again in a short while."; 
      } 
      else 
      { 
       _locationText.Text = string.Format("{0:f6},{1:f6}", _currentLocation.Latitude, _currentLocation.Longitude); 
       Address address = await ReverseGeocodeCurrentLocation(); 
       DisplayAddress(address); 
      } 
     } 

     public void OnProviderDisabled(string provider) { } 

     public void OnProviderEnabled(string provider) { } 

     public void OnStatusChanged(string provider, Availability status, Bundle extras) { } 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      SetContentView(Resource.Layout.CreatetRoute); 

      _addressText = FindViewById<TextView>(Resource.Id.address_text); 
      _locationText = FindViewById<TextView>(Resource.Id.location_text); 
      FindViewById<TextView>(Resource.Id.get_address_button).Click += AddressButton_OnClick; 

      InitializeLocationManager(); 


      Button btnEndPoint = FindViewById<Button>(Resource.Id.btnEndPoint); 
      btnEndPoint.Click += new EventHandler(AfterPointsCollected); 
     } 
     //Location Stuff 
     void InitializeLocationManager() 
     { 
      _locationManager = (LocationManager)GetSystemService(LocationService); 
      Criteria criteriaForLocationService = new Criteria 
      { 
       Accuracy = Accuracy.Fine 
      }; 
      IList<string> acceptableLocationProviders = _locationManager.GetProviders(criteriaForLocationService, true); 

      if (acceptableLocationProviders.Any()) 
      { 
       _locationProvider = acceptableLocationProviders.First(); 
      } 
      else 
      { 
       _locationProvider = string.Empty; 
      } 
      Log.Debug(TAG, "Using " + _locationProvider + "."); 
     } 
     //Override OnResume so that Activity1 will begin listening to the LocationManager when the activity comes into the foreground: 
     protected override void OnResume() 
     { 
      base.OnResume(); 
      _locationManager.RequestLocationUpdates(_locationProvider, 0, 0, this); 
     } 
     async void AddressButton_OnClick(object sender, EventArgs eventArgs) 
     { 
      if (_currentLocation == null) 
      { 
       _addressText.Text = "Can't determine the current address. Try again in a few minutes."; 
       return; 
      } 

      Address address = await ReverseGeocodeCurrentLocation(); 
      DisplayAddress(address); 
     } 

     async Task<Address> ReverseGeocodeCurrentLocation() 
     { 
      Geocoder geocoder = new Geocoder(this); 
      IList<Address> addressList = 
       await geocoder.GetFromLocationAsync(_currentLocation.Latitude, _currentLocation.Longitude, 10); 

      Address address = addressList.FirstOrDefault(); 
      return address; 
     } 

     void DisplayAddress(Address address) 
     { 
      if (address != null) 
      { 
       StringBuilder deviceAddress = new StringBuilder(); 
       for (int i = 0; i < address.MaxAddressLineIndex; i++) 
       { 
        deviceAddress.AppendLine(address.GetAddressLine(i)); 
       } 
       // Remove the last comma from the end of the address. 
       _addressText.Text = deviceAddress.ToString(); 
      } 
      else 
      { 
       _addressText.Text = "Unable to determine the address. Try again in a few minutes."; 
      } 
     } 

     //Override OnPause and unsubscribe Activity1 from the LocationManager when the activity goes into the background: 
     protected override void OnPause() 
     { 
      base.OnPause(); 
      _locationManager.RemoveUpdates(this); 
     } 
     //Changing Activity 
     void AfterPointsCollected(object sender, EventArgs e) 
     { 
      //context //activity 
      Intent intent = new Intent(this, typeof(AfterPointsCollectedActivity)); 
      //starts the activity with the intent above 
      this.StartActivity(intent); 

     } 
+0

エラーメッセージの内容を具体的に説明できますか。 LogCatまたはスクリーンショットを提供する。これをデバッグしようとしましたが、コードのどこに問題が発生しているのかを判断してください。 – buczek

+0

問題は、エミュレータでは完璧に動作するエラーはないが、モバイルデバイスにコンパイルされたときには動作しません。すべてのものがヌルであると言います。データが両方とも私のエラーメッセージがポップアップする理由です。 –

+0

端末で、Googleマップなどの場所を取得するために別のアプリを使用しようとしましたか?端末がこれらのアプリの場所を正しく取得していることを確認します。 – buczek

答えて

関連する問題