2013-08-26 3 views
0

Я застрял в проблеме, чтобы получить lat и long в Android-устройстве. взглянуть на мой код выглядит следующим образом: -Проблема при получении местоположения в устройстве android

public NewLocationActivity(final Context mContext) { 

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

       locationListener = new LocationListener() { 

      public void onLocationChanged(Location location) { 

      updateLocation(location); 



       mSharedPreferences=mContext.getSharedPreferences(HomeSAFEPref.HomeSAFELocationPref,Context.MODE_PRIVATE); 
       SharedPreferences.Editor prefEditor=mSharedPreferences.edit(); 

       String latitude=String.valueOf(currentLatitude); 
       String longitude=String.valueOf(currentLongitude); 
       String heading=String.valueOf(currentheading); 
       String horizAccuracy=String.valueOf(currenthorizAccuracy); 

       prefEditor.putString("Latitude", latitude); 
       prefEditor.putString("Longitude", longitude); 
       prefEditor.putString("Heading", heading); 
       prefEditor.putString("HorizAccuracy", horizAccuracy); 
       prefEditor.commit(); 

       } 

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

      public void onProviderEnabled(String provider) { 

      } 

      public void onProviderDisabled(String provider) { 

      } 

     }; 

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

    void updateLocation(Location location) { 
    currentLocation = location; 
    this. currentLatitude = currentLocation.getLatitude(); 
    this. currentLongitude = currentLocation.getLongitude(); 

    geoField=new GeomagneticField(
      Double.valueOf(location.getLatitude()).floatValue(), 
      Double.valueOf(location.getLongitude()).floatValue(), 
      Double.valueOf(location.getAltitude()).floatValue(), 
      System.currentTimeMillis() 
     ); 

    this.currentheading=geoField.getInclination(); 
    this.currenthorizAccuracy=currentLocation.getAccuracy(); 
    this.speed=(int) currentLocation.getSpeed(); 
} 

Когда я создать объект класса NewLocationActivity конструктор работает .Но моя проблема в том, что метод UpdateLocation не runs.Why я не знаю ... Но несколько раз в других устройствах он работает отлично, и я получаю lat и long easy.Please, дайте мне знать, почему я получаю лат и длинные 0,0.Чтобы заблаговременно ..

ответ

1

используйте этот код: он получает lat, long from ur internet.u также может использовать gps для получения lat, long .it является точной, но не работает внутри здания или может быть в некоторых устройствах из-за их пропускной способности. Лучшим способом является использование обоих и запись условия, что если gps lat, long null для w МИН

public class NewLocationActivity extends Activity implements LocationListener { 


    private LocationManager locationManager; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.digitalsignature); 
      getLocation(); 

    } 


    public String[] getLocation() 
    { 

     String[] locationArray=new String[2]; 


     locationManager = (LocationManager) DigitalSignatureActivity.this.getSystemService(LOCATION_SERVICE); 
     // getting network status 
     boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     // The minimum distance to change Updates in meters 
     final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

     // The minimum time between updates in milliseconds 
     final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

     if (isNetworkEnabled) { 
      locationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 
        MIN_TIME_BW_UPDATES, 
        MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
      Log.d("Network", "Network"); 
      if (locationManager != null) { 
       Location location = locationManager 
         .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       if (location != null) { 
        locationArray[0] = String.valueOf(location.getLatitude()); 
        locationArray[1] = String.valueOf(location.getLongitude()); 

       } 
      } 
     } 
     return locationArray; 

    } 


    /** 
    * Stop using location listener 
    * Calling this function will stop using location updates in your app 
    * */ 
    public void stopUsingLocationUpdates(){ 
     if(locationManager != null){ 
      locationManager.removeUpdates(DigitalSignatureActivity.this); 
     }  
    } 


    @Override 
    public void onLocationChanged(Location arg0) { 
    // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String arg0) { 
    // TODO Auto-generated method stub 

    } 

    @Override 
     public void onProviderEnabled(String arg0) { 
    // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    // TODO Auto-generated method stub 

    } 



} 

также проявляется объявить как этот

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
+0

http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ – Ruban

Смежные вопросы