-2

Hi Guys an working on map activity. I would like to get my exact location address i.e. name and save it and later retrieve the information.At the moment am getting the coordinates and the city name anyone with any idea please assist.

    public class GetCurrentLocation extends Activity
        implements OnClickListener {

    private LocationManager locationMangaer = null;
    private LocationListener locationListener = null;

    private Button btnGetLocation = null;
    private EditText editLocation = null;
    private ProgressBar pb = null;

    private static final String TAG = "Debug";
    private Boolean flag = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_current_location);


        //if you want to lock screen for always Portrait mode
        setRequestedOrientation(ActivityInfo
                .SCREEN_ORIENTATION_PORTRAIT);

        pb = (ProgressBar) findViewById(R.id.progressBar1);
        pb.setVisibility(View.INVISIBLE);

        editLocation = (EditText) findViewById(R.id.editTextLocation);

        btnGetLocation = (Button) findViewById(R.id.btnLocation);
        btnGetLocation.setOnClickListener(this);

        locationMangaer = (LocationManager)
                getSystemService(Context.LOCATION_SERVICE);

    }

    @Override
    public void onClick(View v) {
        flag = displayGpsStatus();
        if (flag) {

            Log.v(TAG, "onClick");

            editLocation.setText("Please!! move your device to" +
                    " see the changes in coordinates." + "\nWait..");

            pb.setVisibility(View.VISIBLE);
            locationListener = new MyLocationListener();

            locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);

        } else {
            alertbox("Gps Status!!", "Your GPS is: OFF");
        }

    }

    /*----Method to Check GPS is enable or disable ----- */
    private Boolean displayGpsStatus() {
        ContentResolver contentResolver = getBaseContext()
                .getContentResolver();
        boolean gpsStatus = Settings.Secure
                .isLocationProviderEnabled(contentResolver,
                        LocationManager.GPS_PROVIDER);
        if (gpsStatus) {
            return true;

        } else {
            return false;
        }
    }

    /*----------Method to create an AlertBox ------------- */
    protected void alertbox(String title, String mymessage) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Your Device's GPS is Disable")
                .setCancelable(false)
                .setTitle("** Gps Status **")
                .setPositiveButton("Gps On",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // finish the current activity
                                // AlertBoxAdvance.this.finish();
                                Intent myIntent = new Intent(
                                        Settings.ACTION_SECURITY_SETTINGS);
                                startActivity(myIntent);
                                dialog.cancel();
                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                // cancel the dialog box
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
    }

    /*----------Listener class to get coordinates ------------- */
    private class MyLocationListener implements LocationListener {
        @Override
        public void onLocationChanged(Location loc) {

            editLocation.setText("");
            pb.setVisibility(View.INVISIBLE);
            Toast.makeText(getBaseContext(), "Location changed : Lat: " +
                            loc.getLatitude() + " Lng: " + loc.getLongitude(),
                    Toast.LENGTH_SHORT).show();
            String longitude = "Longitude: " + loc.getLongitude();
            Log.v(TAG, longitude);
            String latitude = "Latitude: " + loc.getLatitude();
            Log.v(TAG, latitude);

    /*----------to get City-Name from coordinates ------------- */
            String cityName = null;
            Geocoder gcd = new Geocoder(getBaseContext(),
                    Locale.getDefault());
            List<Address> addresses;
            try {
                addresses = gcd.getFromLocation(loc.getLatitude(), loc
                        .getLongitude(), 1);
                if (addresses.size() > 0)
                    System.out.println(addresses.get(0).getLocality());
                cityName = addresses.get(0).getLocality();
            } catch (IOException e) {
                e.printStackTrace();
            }

            String s = longitude + "\n" + latitude +
                    "\n\nMy Currrent City is: " + cityName;
            editLocation.setText(s);
        }

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

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

        @Override
        public void onStatusChanged(String provider,
                                    int status, Bundle extras) {
            // TODO Auto-generated method stub
        }
    }
}
Harshad Pansuriya
  • 20,189
  • 8
  • 67
  • 95

2 Answers2

0

Store your Lat / Long values:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("Latitude", Latitude).commit(); 

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("Longitude", Longitude).commit();

Then retrieve it using:

PreferenceManager.getDefaultSharedPreferences(context).getString("Latitude", "No Latitude Value Stored");

PreferenceManager.getDefaultSharedPreferences(context).getString("Longitude", "No Longitude Value Stored");
  • Using a single String would erase all but the last data which may not be what OP requires. – Ishan Manchanda Dec 15 '16 at 13:14
  • True, but I made an assumption based on him requiring to save his "current" location, which I understand to be only one set of lat / long values. – JamesSwinton Dec 15 '16 at 13:15
  • 1
    "save it and later retrieve the information" The information, in my interpretation, is more than just the last saved data but I may be wrong... Anyways, your answer isn't wrong. He can simply tweak the code or ask for assistance if he needs it. – Ishan Manchanda Dec 15 '16 at 13:17
0

Use Shared preferences to store your data. Create an array list, update the co-ordinates into it and save it. Here's the Shared preferences documentation for reference. If you need code snippets or an explanation of anything, feel free to ask.

UPDATE

Set<String> Lats = new HashSet<String>();
Set<String> Longs = new HashSet<String>();
Lats.add(Latitude);
Longs.add(Longitude);
Context C = getApplicationContext();
SharedPreferences SP = C.getSharedPreferences("My_Prefs",MODE_PRIVATE);
SharedPreferences.Editor E = SP.edit();
E.clear();
E.putStringSet("Lats",Lats);
E.putStringSet("Longs",Longs);
E.commit();

This is for when you save it initially. When you've already saved one or more pairs, retrieve older values then add new ones and then save it:

Context C = getApplicationContext();
SharedPreferences SP = C.getSharedPreferences("My_Prefs",MODE_PRIVATE);
Set<String> Lats = SP.getStringSet("Lats",null);
Set<String> Longs = SP.getStringSet("Longs",null);

Hope I helped :D

Ishan Manchanda
  • 459
  • 4
  • 19