1

I have been building an app that sends the current GPS location to stored numbers. But, the location has always been 0.0, 0.0.

Here's the code:

public class ContactsList extends AppCompatActivity {

Button addContacts;
Button emergencyButton;

ListView listView;

ArrayList<HashMap<String, String>> contactsList;
ArrayList<Contact> contactobjectsList;
ArrayList<String> phonenumbersList;

DatabaseHelper databaseHelper = new DatabaseHelper(ContactsList.this);

LocationManager locationManager;
LocationListener locationListener;

double latitudeVal, longitudeVal;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contacts_list);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    addContacts = (Button) findViewById(R.id.moveButton);
    listView = (ListView) findViewById(R.id.contactslistView);
    emergencyButton = (Button) findViewById(R.id.emergency_button);

    contactobjectsList = new ArrayList<Contact>();
    contactobjectsList = databaseHelper.getContacts();

    phonenumbersList = new ArrayList<String>();
    phonenumbersList = databaseHelper.getNumbers();

    contactsList = new ArrayList<HashMap<String, String>>();
    contactsList = databaseHelper.getValues();

    // For GPS:

    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {                   

                latitudeVal = location.getLatitude();
                longitudeVal = location.getLongitude();
            }
        }

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

        }

        @Override
        public void onProviderEnabled(String provider) {
            Toast toast = Toast.makeText(getApplicationContext(), "GPS Enabled", Toast.LENGTH_LONG);
            toast.show();


        }

        @Override
        public void onProviderDisabled(String provider) {

            Toast toast = Toast.makeText(getApplicationContext(), "Enable GPS", Toast.LENGTH_LONG);
            toast.show();
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);


        }
    };


    ListAdapter listAdapter = new SimpleAdapter(ContactsList.this, contactsList, R.layout.customlayout,
            new String[]{DatabaseHelper.COLUMN_ID, DatabaseHelper.COLUMN_PERSONNAME, DatabaseHelper.COLUMN_PHONENUMBER},
            new int[]{R.id._idcust, R.id.personnamecust, R.id.phonenumbercust});

    listView.setAdapter(listAdapter);


    addContacts.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent move = new Intent(ContactsList.this, AddContact.class);
            startActivity(move);


        }
    });


    emergencyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);



            String printLat = Double.toString(latitudeVal);
            String printLon = Double.toString(longitudeVal);

            Toast toast = Toast.makeText(getApplicationContext(),printLat+", "+printLon,Toast.LENGTH_LONG);
            toast.show();

           // sendSMS(phonenumbersList);


        }
    });



}

For some reason, default values for the latitude and the longitude as indicated in the LocationListener class are the ones being returned (0.0, 0.0). I really don't know what is wrong with my code and I would seriously appreciate some help at this point.

halfer
  • 19,824
  • 17
  • 99
  • 186

2 Answers2

1
<uses-permission
    android:name="android.permission.ACCESS_FINE_LOCATION"
    android:maxSdkVersion="22" />

Remove android:maxSdkVersion="22" from manifest, solved the problem or if your targetSdkVersion > 21 then you have to implement Run time permission for ACCESS_FINE_LOCATION.

Vinay
  • 11
  • 3
0

You should add this line

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);

just after this line

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

rather than in emergencyButton.setOnClickListener

Anand Kumar Jha
  • 614
  • 9
  • 23
  • this may help you http://stackoverflow.com/questions/17519198/how-to-get-the-current-location-latitude-and-longitude-in-android – Anand Kumar Jha Jun 21 '16 at 07:56