user5629232
user5629232

Reputation:

How can I send current location from one activity to another?

I am using map to get current location and now I want to send my current location to another activity which has form to input all the data. I am confused about which variables and methods I should use to send the location data.

ChooseFromMapActivity

This is the activity where I am getting my current location. And now on Click of useLocation layout I want to send this location to the edit text of another activity i.e GoSendActivity.

public class ChooseFromMapActivity extends AppCompatActivity implements
        LocationListener, GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {

    private LocationRequest mLocationRequest;
    GoogleMap mGoogleMap;

    private GoogleApiClient mGoogleApiClient;
    boolean mUpdatesRequested = false;
    private LatLng center;
    private LinearLayout markerLayout;
    private Geocoder geocoder;
    private List<Address> addresses;
    private TextView Address;
    double latitude;
    double longitude;
    private GPSTracker gps;
    private LatLng curentpoint;
    private LinearLayout useLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_from_map);
        Address = (TextView) findViewById(R.id.textShowAddress);
        markerLayout = (LinearLayout) findViewById(R.id.locationMarker);
        useLocation = (LinearLayout)findViewById(R.id.LinearUseLoc);

        int status = GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getBaseContext());

        if (status != ConnectionResult.SUCCESS) { // Google Play Services are
            // not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this,
                    requestCode);
            dialog.show();

        } else { // Google Play Services are available

            // Getting reference to the SupportMapFragment
            // Create a new global location parameters object
            mLocationRequest = LocationRequest.create();

            /*
             * Set the update interval
             */
            mLocationRequest.setInterval(GData.UPDATE_INTERVAL_IN_MILLISECONDS);

            // Use high accuracy
            mLocationRequest
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

            // Set the interval ceiling to one minute
            mLocationRequest
                    .setFastestInterval(GData.FAST_INTERVAL_CEILING_IN_MILLISECONDS);

            // Note that location updates are off until the user turns them on
            mUpdatesRequested = false;

            /*
             * Create a new location client, using the enclosing class to handle
             * callbacks.
             */
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(LocationServices.API).addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).build();

            mGoogleApiClient.connect();
        }

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


            }
        });
    }

    private void stupMap() {
        try {

            mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();

            // Enabling MyLocation in Google Map
            mGoogleMap.setMyLocationEnabled(true);
            mGoogleMap.getUiSettings().setZoomControlsEnabled(true);
            mGoogleMap.getUiSettings().setMyLocationButtonEnabled(true);
            mGoogleMap.getUiSettings().setCompassEnabled(true);
            mGoogleMap.getUiSettings().setRotateGesturesEnabled(true);
            mGoogleMap.getUiSettings().setZoomGesturesEnabled(true);

            gps = new GPSTracker(this);

            gps.canGetLocation();

            latitude = gps.getLatitude();
            longitude = gps.getLongitude();
            curentpoint = new LatLng(latitude, longitude);

            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(curentpoint).zoom(19f).tilt(70).build();

            mGoogleMap.setMyLocationEnabled(true);
            mGoogleMap.animateCamera(CameraUpdateFactory
                    .newCameraPosition(cameraPosition));
            // Clears all the existing markers
            mGoogleMap.clear();

            mGoogleMap.setOnCameraChangeListener(new OnCameraChangeListener() {

                @Override
                public void onCameraChange(CameraPosition arg0) {
                    // TODO Auto-generated method stub
                    center = mGoogleMap.getCameraPosition().target;

                    mGoogleMap.clear();
                    markerLayout.setVisibility(View.VISIBLE);

                    try {
                        new GetLocationAsync(center.latitude, center.longitude)
                                .execute();

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


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

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnectionFailed(ConnectionResult arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnected(Bundle arg0) {
        // TODO Auto-generated method stub
        stupMap();

    }

    private class GetLocationAsync extends AsyncTask<String, Void, String> {

        // boolean duplicateResponse;
        double x, y;
        StringBuilder str;

        public GetLocationAsync(double latitude, double longitude) {
            // TODO Auto-generated constructor stub

            x = latitude;
            y = longitude;
        }

        @Override
        protected String doInBackground(String... params) {

            try {
                geocoder = new Geocoder(ChooseFromMapActivity.this, Locale.ENGLISH);
                addresses = geocoder.getFromLocation(x, y, 1);
                str = new StringBuilder();
                if (Geocoder.isPresent()) {

                    if ((addresses != null) && (addresses.size() > 0)) {
                        Address returnAddress = addresses.get(0);

                        String localityString = returnAddress.getLocality();
                        String city = returnAddress.getCountryName();
                        String region_code = returnAddress.getCountryCode();
                        String zipcode = returnAddress.getPostalCode();

                        str.append(localityString + "");
                        str.append(city + "" + region_code + "");
                        str.append(zipcode + "");
                    }
                } else {
                }
            } catch (IOException e) {
                Log.e("tag", e.getMessage());
            }
            return null;

        }

        @Override
        protected void onPostExecute(String result) {
            try {
                Address.setText(addresses.get(0).getAddressLine(0)
                        + addresses.get(0).getAddressLine(1) + " ");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void onProgressUpdate(Void... values) {

        }
    }

    @Override
    public void onConnectionSuspended(int arg0) {
        // TODO Auto-generated method stub

    }
}

GoSendActivity

This is my GoSendActivity which has edit text view. I want to get the current location on edttxt_from text view.

    public class GoSend extends AppCompatActivity {
    LatLng latLng;
    private GoogleMap mMap;
    MarkerOptions markerOptions;
    LinearLayout ll;
    Toolbar toolbar;
    EditText editTextLocation;
    EditText edtxt_from;
    EditText edtxt_to;

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

        setUI();

        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // Respond to the action bar's Up/Home button
            case android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void setUI() {

        ll = (LinearLayout) findViewById(R.id.LinearLayoutGoSend);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("GO-SEND");


        try {
            if (mMap == null) {
                mMap = ((MapFragment) getFragmentManager().
                        findFragmentById(R.id.map)).getMap();
            }
            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            LatLng sydney = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
            mMap.setMyLocationEnabled(true);
        } catch (Exception e) {
            e.printStackTrace();
        }

         edtxt_from=(EditText)findViewById(R.id.editText_from);
         edtxt_to=(EditText)findViewById(R.id.editText_to);

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

                Intent i=new Intent(getApplicationContext(),PickLocationActivity.class);
                startActivity(i);
            }
        });

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

                Intent  i=new Intent(getApplicationContext(),PickLocationActivity.class);
                startActivity(i);
            }
        });

    }    
}

Location class

    public class Location {

    private int id;
    private String mFrom_loc;
    private String mTo_loc;
    private String mFromloc_details;
    private String mToloc_details;
    private String mItems_details;

    public Location(int id,String mFrom_loc,String mFromloc_details,String mTo_loc,String mToloc_details,String mItems_details)
    {
        this.id=id;
        this.mFrom_loc=mFrom_loc;
        this.mFromloc_details=mFromloc_details;
        this.mTo_loc=mTo_loc;
        this.mToloc_details=mToloc_details;
        this.mItems_details=mItems_details;

    }

    public Location(String mFrom_loc){
        this.mFrom_loc=mFrom_loc;
    }
    public Location(){}

    public int getId(int id){return id;}
    public String getmFrom_loc(String mFrom_loc){return mFrom_loc;}
    public String getmTo_loc(String mTo_loc){return  mTo_loc;}
    public String getmFromloc_details(String mFromloc_details){return mFromloc_details;}
    public String getmToloc_details(String mToloc_details){return mToloc_details;}
    public String getmItems_details(String mItems_details){return mItems_details;}



   public void setId(){this.id=id;}
    public void setmFrom_loc(){this.mFrom_loc=mFrom_loc;}
    public void setmTo_loc(){this.mTo_loc=mTo_loc;}
    public  void setmFromloc_details(){this.mFromloc_details=mFromloc_details;}
    public void setmToloc_details(){this.mToloc_details=mToloc_details;}
    public void setmItems_details(){this.mItems_details=mItems_details;}

}

How can I achieve this?? Please help..

Upvotes: 1

Views: 4897

Answers (3)

Gordon developer
Gordon developer

Reputation: 417

Apart from passing the data to the next activity using intents, you can also use shared preferences, TinyDB lib achieves great results for caching data. Yoou will need to sync this in your gradle file :

compile 'com.mukesh:tinydb:1.0.1'

then in your onCreate in each activity you will be using the same, initialize the tinyDB by passing application context

TinyDB tinyDB = new TinyDB(getApplicationContext());

With that you can store and retrieve any data within the app using a key-value pair,example to store your coordinates, just call :

tinyDB.putDouble("latitude",latitude);
tinyDB.putDouble("longitude",longitude);

And you can retrieve the data this way:

double latitude = tinyDB.getDouble("latitude");
double longitude = tinyDB.getDouble("longitude");

This class supports all data formats, from Strings,Double,Float and even objects such as ararayLists. Would highly recommend you to try it out.

Upvotes: 1

Bhargav Thanki
Bhargav Thanki

Reputation: 4954

try this :

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

            Intent intent = new Intent(ChooseFromMapActivity.this , GoSendActivity.class);
            intent.putExtra("Latitude", latitude);
            intent.putExtra("Longitude", longitude);
            startActivity(intent);
        }
    });

And inside onCreate of GoSendActivity,get latitude and longitude like this :

Bundle extras = getIntent().getExtras();
if (extras != null) {
    double latitude = extras.getDouble("Latitude");
    double longitude = extras.getDouble("Longitude");
}

Now you can set latitude and longitude to your edittext edittext.setText(String.valueOf(latitude));

Upvotes: 2

androgo
androgo

Reputation: 574

Make this class as serialisable and put it into intent using bundle.putSerializable("myclaa",location).

Class Location implements Seraializable{ }

Upvotes: 0

Related Questions