0

How can get the GPS location in the service class I am trying with the code below but its is showing the GPS location longitude and latitude as 0.0 ,0.0

import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Geocoder;
import android.os.AsyncTask;
import android.os.IBinder;
import android.text.format.Time;
import android.util.Log;

public class ServiceTest extends Service {

  JSONParser jsonParser = new JSONParser();



  GPSTracker gps;

  Geocoder geocoder;


  Double mylatitude, mylongitude;



  String uid,code;

  SharedPreferences sharpref_userdata;


  @Override
  public IBinder onBind(Intent intent) {
      return null;
  }

  @Override
  public void onCreate() {
      super.onCreate();
      mTimer = new Timer();
      mTimer.schedule(timerTask, 8000, 6 * 1000);

  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
      try {

      } catch (Exception e) {
          e.printStackTrace();
      }
      return super.onStartCommand(intent, flags, startId);
  }

  private Timer mTimer;

  TimerTask timerTask = new TimerTask() {

      @Override
      public void run() {
          Log.e("Log", "Running");
          new empdats().execute();
          Log.e("testing", "saving done");
      }
  };

  public void onDestroy() {
      try {
          mTimer.cancel();
          timerTask.cancel();
      } catch (Exception e) {
          e.printStackTrace();
      }
      Intent intent = new Intent("com.android.techtrainner");
      intent.putExtra("yourvalue", "torestore");
      sendBroadcast(intent);
  }


  class empdats extends AsyncTask<String, String, String> {
      String status;
      String message;
      String data,time;



      @Override
      protected void onPreExecute() {
          super.onPreExecute();

          SharedPreferences prefuserdata = getSharedPreferences("userdata1", 0);
          uid = prefuserdata.getString("empmob", "0");
          code = prefuserdata.getString("empcode", "0");



          Time today = new Time(Time.getCurrentTimezone());
          today.setToNow();
          time = today.format("%k:%M:%S");

          gps = new GPSTracker(ServiceTest.this);

          // check if GPS enabled
          if (gps.canGetLocation()) {

              mylatitude = gps.getLatitude();
              mylongitude = gps.getLongitude();

              // \n is for new line

          } else {
              // can't get location
              // GPS or Network is not enabled
              // Ask user to enable GPS/network in settings
              gps.showSettingsAlert();
          }

      }

      protected String doInBackground(String... args) {
          List<NameValuePair> userpramas = new ArrayList<NameValuePair>();

          userpramas.add(new BasicNameValuePair("cid", code));
          userpramas.add(new BasicNameValuePair("contact", uid));
          userpramas.add(new BasicNameValuePair("longitude", mylongitude.toString()));
          userpramas.add(new BasicNameValuePair("latitude", mylatitude.toString()));
          userpramas.add(new BasicNameValuePair("time", time.toString()));
          Log.e("testing", "msg to send==" + userpramas.toString());
          JSONObject json = jsonParser.makeHttpRequest(CommonClass.EMPJOIN_URL, "POST",

userpramas); Log.e("testing", "json==" + json);

          try {

              status = json.getString("result");
              data = json.getString("data");
              Log.e("testing", "status==" + json);

          } catch (JSONException e) {
              e.printStackTrace();
          }
          return status;
      }

      @Override
      protected void onPostExecute(String result) {
          super.onPostExecute(result);



      }
  }

}

And my gps tracking code is

package com.my.emp;

import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;

public class GPSTracker extends Service implements LocationListener {

    private final Context mContext;

    // flag for GPS status
    boolean isGPSEnabled = false;

    // flag for network status
    boolean isNetworkEnabled = false;

    // flag for GPS status
    boolean canGetLocation = false;

    Location location = null; // location
    double latitude; // latitude
    double longitude; // longitude

    // The minimum distance to change Updates in meters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

    // The minimum time between updates in milliseconds
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

    // Declaring a Location Manager
    protected LocationManager locationManager;

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

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

            // getting GPS status
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
                if (isNetworkEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS", "GPS Enabled");
                        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;
    }

    /**
     * Stop using GPS listener Calling this function will stop using GPS in your
     * app
     * */
    public void stopUsingGPS() {
        if (locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }

    /**
     * Function to get latitude
     * */
    public double getLatitude() {
        if (location != null) {
            latitude = location.getLatitude();
        }

        // return latitude
        return latitude;
    }

    /**
     * Function to get longitude
     * */
    public double getLongitude() {
        if (location != null) {
            longitude = location.getLongitude();
        }

        // return longitude
        return longitude;
    }

    /**
     * Function to check GPS/wifi enabled
     * 
     * @return boolean
     * */
    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    /**
     * Function to show settings alert dialog On pressing Settings button will
     * lauch Settings Options
     * */
    public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        // Setting Dialog Title
        alertDialog.setTitle("GPS is settings");

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

        // On pressing Settings button
        alertDialog.setPositiveButton("Settings",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(
                                Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        mContext.startActivity(intent);
                    }
                });

        // on pressing cancel button
        alertDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

        // Showing Alert Message
        alertDialog.show();
    }

    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

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

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
Udit Roy
  • 85
  • 1
  • 10

1 Answers1

0

first import google-play-services_lib to your work space then in your activity xml add following code

<fragment
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_below="@+id/distance"
android:name="com.google.android.gms.maps.SupportMapFragment" />

Add following code to your java file

    private GoogleMap googleMap;
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

and add following code in AndroidManifest.java file

<meta-data
        android:name="com.google.android.gms.version"
        android:screenOrientation="portrait"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="place your api key here" />
Yatish
  • 521
  • 3
  • 14