user1642978
user1642978

Reputation: 21

Cannot find current location using GPS

I have tried the below program. It is working in eclipse -> if u give lattitude and longitude value through ddms means it displayed in emulator as current position.... but its not detecting current position in android phone.

private class mylocationlistener implements LocationListener {

    public void onLocationChanged(Location location) {    
     Date today = new Date();  
Timestamp currentTimeStamp = new Timestamp(today.getTime());

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new mylocationlistener();    
boolean isGPS = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 

          if (isGPS){
              lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
              if (location != null) {


        Log.d("LOCATION CHANGED", location.getLatitude() + "");
        Log.d("LOCATION CHANGED", location.getLongitude() + "");
        String str = "\n CurrentLocation: "+
        "\n Latitude: "+ location.getLatitude() + 
        "\n Longitude: " + location.getLongitude() + 
        "\n Accuracy: " + location.getAccuracy() + 
        "\n CurrentTimeStamp "+ currentTimeStamp;         
          Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
          tv.append(str);           
                   }      
        else
           {
        String s1="GPS activation in process";
            Toast.makeText(MainActivity.this,s1,Toast.LENGTH_SHORT).show();
            /*alert.setTitle("gps");
            alert.setMessage("GPS activation in progress,\n Please click after few second.");
            alert.setPositiveButton("OK", null);
            alert.show();*/

           }
          }
            else
           {
               String s2="Enable Gps";
            Toast.makeText(MainActivity.this,s2,Toast.LENGTH_SHORT).show();
           }

    } 





public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

}

Upvotes: 2

Views: 2125

Answers (4)

harshit
harshit

Reputation: 3846

Is it possible that your android phone is not getting a GPS signal? locationManager.getLastKnownLocation will return null if the GPS has not had time to get a fix yet. Android does not provide a 'give me the location now' method. When the GPS has got a fix, the onLocationChanged() will run. If it is fine with emulator, then there is some problem with the device. Checkout my question Not able to get Location by GPS : Android I had similar problem. What happened with me was that I was receiving location in google maps by network provider. Are you sure you are receiving it through GPS?

Upvotes: 0

Ajay Kumar Meher
Ajay Kumar Meher

Reputation: 1952

you can use this Example for Finding Location Periodically

Upvotes: 0

Niranj Patel
Niranj Patel

Reputation: 33248

If you want to overlay of your current location then it is better to use default method instead of custom overlay..

Here is default overlay method of current location.

MyLocationOverlay mMyLocationOverlay = new MyLocationOverlay(getApplicationContext(),
                Your_MapView);
mMyLocationOverlay.enableMyLocation();
mMyLocationOverlay.onProviderEnabled(LocationManager.NETWORK_PROVIDER);

mapOverlays = map_view.getOverlays();

you can also use GPS

mMyLocationOverlay.onProviderEnabled(LocationManager.GPS_PROVIDER);

Upvotes: 0

Parag Chauhan
Parag Chauhan

Reputation: 35946

I made one service for that. It is easy for get Longitude / Latitude using it.

Copy/paste this class in your project.

package com.sample;
    import com.sample.globalconstant;
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.location.Location;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.util.Log;
    import android.widget.Toast;

    public class MyServiceGPS extends Service
    {
        private static final String TAG = "BOOMBOOMTESTGPS";
        private LocationManager mLocationManager = null;
        private static final int LOCATION_INTERVAL = 1000;
        private static final float LOCATION_DISTANCE = 10f;

        private class LocationListener implements android.location.LocationListener{
            Location mLastLocation;
            public LocationListener(String provider)
            {
                Log.e(TAG, "LocationListener " + provider);
                mLastLocation = new Location(provider);
            }
            public void onLocationChanged(Location location)
            {
                Log.e(TAG, "onLocationChanged: " + location.getLatitude() +"....."+ location.getLongitude());
                globalconstant.lat  = location.getLatitude();
                globalconstant.lon  = location.getLongitude();
                Toast.makeText(getApplicationContext(), location.getLatitude() +"....."+ location.getLongitude(), 1000).show();
                mLastLocation.set(location);
            }
            public void onProviderDisabled(String provider)
            {
                Log.e(TAG, "onProviderDisabled: " + provider);           
            }
            public void onProviderEnabled(String provider)
            {
                Log.e(TAG, "onProviderEnabled: " + provider);
            }
            public void onStatusChanged(String provider, int status, Bundle extras)
            {
                Log.e(TAG, "onStatusChanged: " + provider);
            }
        }
        LocationListener[] mLocationListeners = new LocationListener[] {
                new LocationListener(LocationManager.GPS_PROVIDER),
                new LocationListener(LocationManager.NETWORK_PROVIDER)
        };
        @Override
        public IBinder onBind(Intent arg0)
        {
            return null;
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId)
        {
            Log.e(TAG, "onStartCommand");
            super.onStartCommand(intent, flags, startId);      
            return START_STICKY;
        }
        @Override
        public void onCreate()
        {
            Log.e(TAG, "onCreate");
            initializeLocationManager();
            try {
                mLocationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                        mLocationListeners[1]);

            } catch (java.lang.SecurityException ex) {
                Log.i(TAG, "fail to request location update, ignore", ex);
            } catch (IllegalArgumentException ex) {
                Log.d(TAG, "network provider does not exist, " + ex.getMessage());
            }
            try {
                mLocationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                        mLocationListeners[0]);
            } catch (java.lang.SecurityException ex) {
                Log.i(TAG, "fail to request location update, ignore", ex);
            } catch (IllegalArgumentException ex) {
                Log.d(TAG, "gps provider does not exist " + ex.getMessage());
            }
        }
        @Override
        public void onDestroy()
        {
            Log.e(TAG, "onDestroy");
            super.onDestroy();
            if (mLocationManager != null) {
                for (int i = 0; i < mLocationListeners.length; i++) {
                    try {
                        mLocationManager.removeUpdates(mLocationListeners[i]);
                    } catch (Exception ex) {
                        Log.i(TAG, "fail to remove location listners, ignore", ex);
                    }
                }
            }
        }
        private void initializeLocationManager() {
            Log.e(TAG, "initializeLocationManager");
            if (mLocationManager == null) {
                mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
            }
        }
    }

Copy this code in your Activity when you want to start:

startService(new Intent(this,MyServiceGPS.class));

Create one class globalconstant:

public class globalconstant { public static double lat, lon; }

when you want to current latitude and longitude in your project only write this globalconstant.lat ,globalconstant.lon

Add uses-permission in Manifest

Upvotes: 2

Related Questions