1

I'm currently implement an android app. I want to get the current location with Start button. After I walk some distance, I want to get update current location with Stop button. I already can get the current point when I click Start. But I keep fail to update the current location. Anyone can teach me how to update the Current Location after I click Stop Button?

package com.example.fitmap;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.SupportMapFragment;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity implements LocationListener{
private GoogleMap map;
private TextView textTimer;
private long startTime = 0L;
private Handler myHandler = new Handler();
private Runnable updateTimerMethod;
long timeInMillies = 0L;
long timeSwap = 0L;
long finalTime = 0L;
private LocationManager lm;
private LocationListener locationListener;
double latitude;
double longitude;


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

        if (map == null){
         // Getting reference to the SupportMapFragment of activity_main.xml    
             SupportMapFragment mf = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

             // get google map from the fragment
             map = mf.getMap();                                 
            }

        if (map !=null ){

            // Enabling MyLocation Layer of Google Map
            map.setMyLocationEnabled(true);

            // Getting LocationManager object from System Service LOCATION_SERVICE
            lm = (LocationManager) getSystemService(LOCATION_SERVICE);
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

            String provider = LocationManager.NETWORK_PROVIDER;

            if (provider == null){
                onProviderDisabled(provider);
            }

            // Getting Current Location
            Location loc = lm.getLastKnownLocation(provider);
            if (loc != null){
                onLocationChanged(loc);

            }

            map.setOnMapLongClickListener(onLongClickMapSettings());
        }


        textTimer = (TextView) findViewById(R.id.textTimer);
        final Button start = (Button) findViewById(R.id.start);

        start.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                startTime = SystemClock.uptimeMillis();

                myHandler.postDelayed(updateTimerMethod, 0);

                 TextView lat = (TextView) findViewById(R.id.calorie);
                    lat.setText(""+latitude);

                    TextView longi = (TextView) findViewById(R.id.distance);
                    longi.setText(""+longitude);

                start.setEnabled(false);
            }
        });


        updateTimerMethod = new Runnable() {

            public void run() {
            timeInMillies = SystemClock.uptimeMillis()-startTime;
            finalTime = timeSwap + timeInMillies;

            int seconds = (int) (finalTime / 1000);
            int minutes = seconds / 60;
            seconds = seconds % 60;
            int milliseconds = (int) (finalTime % 1000);
            textTimer.setText(""+ minutes + ":"
            + String.format("%02d", seconds) + ":"
            + String.format("%03d", milliseconds));
            myHandler.postDelayed(this, 0);
            }

            };

            Button stop = (Button) findViewById(R.id.stop);
            stop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
            timeSwap += timeInMillies;
            myHandler.removeCallbacks(updateTimerMethod);

            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

            TextView lat = (TextView) findViewById(R.id.calorie);
            lat.setText(""+latitude);

            TextView longi = (TextView) findViewById(R.id.distance);
            longi.setText(""+longitude);

            start.setEnabled(true);
            }
            });


    }       

    private OnMapLongClickListener onLongClickMapSettings() {
        // TODO Auto-generated method stub
        return new OnMapLongClickListener(){

            @Override
            public void onMapLongClick(LatLng arg0) {
                // TODO Auto-generated method stub          
                Log.i(arg0.toString(), "User Long CLicked");
            }
        };          
    }

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

        // Getting latitude of the current location
        latitude = location.getLatitude();

        // Getting longitude of the current location
        longitude = location.getLongitude();

        // Creating a LatLng object for the current location
        LatLng latLng = new LatLng(latitude, longitude);

        // Showing the current location in Google Map
        map.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        // Zoom in the Google Map
        map.animateCamera(CameraUpdateFactory.zoomTo(17));

    }



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

    }

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

    }

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

    }


}
user4157124
  • 2,809
  • 13
  • 27
  • 42
wendy
  • 131
  • 7
  • Try to get new lat-lang on stop button click and move or animate camera to new lat-lang. – Haresh Chhelana Nov 22 '14 at 06:59
  • I know it's need to get new lat-long but My problem is I can't update the current location, so I can't get the new lat-long. So i'm asking for help – wendy Nov 23 '14 at 06:14

0 Answers0