Deepak Sharma
Deepak Sharma

Reputation: 5073

Issue in getting the location in android device

I am stuck in a problem to get the lat and long in android device. have a look at my code as follows:-

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

When i creating the object of class NewLocationActivity constructor works .But my problem is that UpdateLocation method does not runs.Why I dont know...But some times in other devices it runs perfectly and i get the lat and long easily.Please let me know why i am getting the lat and long 0,0.Thanks in advance..

Upvotes: 1

Views: 287

Answers (1)

Ruban
Ruban

Reputation: 1534

use this code :it gets lat ,long from ur internet.u can also use gps for getting lat ,long .it is accurate but wont work inside building or may be in some devices because of their receiving capacity.the best way is to use both and write the condition that if gps lat,long is null go for wifi

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

     }



}

also in manifest declare like this

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

Upvotes: 1

Related Questions