-1

I have code for get phone GPS location. but it don't work correctly.

the location shows only the first time I press the button (button for get location). I changed my place and press it again but it never change... even when i restart the app!!

gps:

package com.example.hhh;

public class GPSTracker extends Service implements LocationListener{

    private final Context context;

    boolean isGPSEnabled = false;
    boolean isNetworkEnabled = false;
    boolean canGetLocation = false;

    Location location;

    double latitude;
    double longitude;

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;

    protected LocationManager locationManager;

    public GPSTracker(Context context) {
        this.context = context;
        getLocation();
    }

    public Location getLocation() {
        try {
            locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);

            isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if(!isGPSEnabled && !isNetworkEnabled) {

            } else {
                this.canGetLocation = true;

                if (isNetworkEnabled) {

                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                        if (location != null) {

                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }

                }

                if(isGPSEnabled) {
                    if(location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                        if(locationManager != null) {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

                            if(location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }


    public void stopUsingGPS() {
        if(locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }

    public double getLatitude() {
        if(location != null) {
            latitude = location.getLatitude();
        }
        return latitude;
    }

    public double getLongitude() {
        if(location != null) {
            longitude = location.getLongitude();
        }

        return longitude;
    }

    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);

        alertDialog.setTitle("GPS is settings");

        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                context.startActivity(intent);
            }
        });

        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        alertDialog.show();
    }

    @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

    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

main:

 package com.Gps.getlocation;

    public class MainActivity extends ActionBarActivity {

    private EditText editText11;
    private EditText editText22; 

        Button btnShowLocation;
        Button btnn;
        GPSTracker gps;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lay);

            editText11 = (EditText) findViewById(R.id.editText1);
            editText22 = (EditText) findViewById(R.id.editText2);




            btnShowLocation = (Button) findViewById(R.id.show_location);
            btnn = (Button) findViewById(R.id.btn);


            btnShowLocation.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    gps = new GPSTracker(MainActivity.this);

                    if(gps.canGetLocation()) {
                        double latitude = gps.getLatitude();
                        double longitude = gps.getLongitude();


                        editText11.setText("" + latitude , TextView.BufferType.EDITABLE);
                        editText22.setText("" + longitude , TextView.BufferType.EDITABLE);




                    } else {
                        gps.showSettingsAlert();
                    }
                }
            });
           }
       }

I didn't like to put all code here but i really can't understand the problem.
the problem should be something stupid i believe... but i cant find that stupid problem

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268
dave
  • 1
  • 4
  • First, you need to [Requesting Permissions at Run Time](https://developer.android.com/training/permissions/requesting.html) for [ACCESS_FINE_LOCATION](https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION) , then try to get location. – pRaNaY Sep 11 '16 at 13:06
  • @pRaNaY you mean this: " " ?? – dave Sep 11 '16 at 13:09
  • Check "Requesting Permissions at Run Time" link on above my comment. you can also check [this](http://stackoverflow.com/a/32084038/2949612) answer to ask runtime permission to user. – pRaNaY Sep 11 '16 at 13:16

2 Answers2

2

You're not updating the location variable. Add this line in onLocationChanged() :

location = arg0;
Omar Aflak
  • 2,918
  • 21
  • 39
0

You only call getLocation() once when the app starts. Also getLocation() is much more complicated than necessary. You only need to get the LocationManager and call requestLocationUpdates(). Then in onLocationChanged() save the new location.

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268