2014-11-24 54 views
3

我想獲取用戶的當前位置(經度和緯度)始終只使用基於SIM的網絡,而不是通過使用任何其他網絡(如WiFi ,移動數據,全球定位系統和其他網絡,甚至所有這些都在手機的禁用模式)。不一定準確的位置,但即使大致的位置。如何獲取用戶位置基於移動SIM卡android在c#中「

有沒有可能得到它?如果任何人可以解釋幷包括代碼;我在谷歌搜索但沒有得到正確的相關答案。

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using Android.Locations; 
using Android.Util; 
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Linq; 
using System.Xml.Linq; 
using System.Threading; 




namespace GPS_Android 
{ 
    [Activity(Label = "GPS_Android", MainLauncher = true, Icon = "@drawable/icon")] 
    public class MainActivity : Activity,ILocationListener 
     { 
     private Location _currentLocation; 
     private LocationManager _locationManager; 
     private TextView _locationText; 
     private TextView _addressText; 
     private string _locationProvider; 


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

      _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(); 


     } 

     public 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; 
      } 
     } 


     protected override void OnResume() 
     { 
      base.OnResume(); 
      _locationManager.RequestLocationUpdates(_locationProvider, 0, 0, this); 
     } 


     protected override void OnPause() 
     { 
      base.OnPause(); 
      _locationManager.RemoveUpdates(this); 
     } 

     async void AddressButton_OnClick(object sender, EventArgs eventArgs) 
     { 
      if (_currentLocation == null) 
      { 
       _addressText.Text = "Can't determine the current location."; 
       return; 
      } 

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

      Address address = addressList.FirstOrDefault(); 
      if (address != null) 
      { 
       StringBuilder deviceAddress = new StringBuilder(); 
       for (int i = 0; i < address.MaxAddressLineIndex; i++) 
       { 
        deviceAddress.Append(address.GetAddressLine(i)) 
         .AppendLine(","); 
       } 
       _addressText.Text = deviceAddress.ToString(); 
      } 
      else 
      { 
       _addressText.Text = "Unable to determine the address."; 
      } 

    } 

     public void OnLocationChanged(Location location) 
     { 
      _currentLocation = location; 
      if (_currentLocation == null) 
      { 
       _locationText.Text = "Unable to determine your location."; 
      } 
      else 
      { 
       _locationText.Text = String.Format("{0},{1}", _currentLocation.Latitude, _currentLocation.Longitude); 
      } 

     } 

     public void OnProviderDisabled(string provider) { } 

     public void OnProviderEnabled(string provider) { } 

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

回答

0

您可以使用LocationManager.NETWORK_PROVIDER來獲取谷歌縱橫nd經度無需打開GPS

btnNWShowLocation.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      Location nwLocation = appLocationService 
        .getLocation(LocationManager.NETWORK_PROVIDER); 

      if (nwLocation != null) { 
       double latitude = nwLocation.getLatitude(); 
       double longitude = nwLocation.getLongitude(); 
       Toast.makeText(
         getApplicationContext(), 
         "Mobile Location (NW): \nLatitude: " + latitude 
           + "\nLongitude: " + longitude, 
         Toast.LENGTH_LONG).show(); 

      } else { 
       showSettingsAlert("NETWORK"); 
      } 

     } 
    }); 
相關問題