Why my location is not updating frequently as configured

156 Views Asked by At

I am fetching the locations for every minute in below code. Actually as per the requirement fetching the location every minute and send it to server via Sockets.

Below is my code which misses location updates on server for every minutes ,I don't know the reason behind it. please suggest.

private static final int PERIOD=60000;

private void initLocationTracker()
{    
    try{
        mgr=(AlarmManager)getSystemService(ALARM_SERVICE);
        Intent i=new Intent(this, LocationPoller.class);
        i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(this, LocationReceiver.class));
        i.putExtra(LocationPoller.EXTRA_PROVIDER, LocationManager.GPS_PROVIDER);
        pi=PendingIntent.getBroadcast(this, 0, i, 0);
        mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
    }
    catch (Exception e)
    {
        String s = e.getMessage();
    }
}

Below is my code with Broadcast receiver and Sockets

public class LocationReceiver extends BroadcastReceiver {

    private  String _serverAddress;
    private String _addressType;
    private int _port;
    private long _driverId;
    private Location _location;
    private String _message;
    //private Context _context;

    @Override
    public void onReceive(Context context, Intent intent) {
        File log= new File(Environment.getExternalStorageDirectory(), "LocationLog.txt");

        try {
            Bundle b=intent.getExtras();
            Location loc=(Location)b.get(LocationPoller.EXTRA_LOCATION);
            String msg;

            if (loc==null) {
                loc=(Location)b.get(LocationPoller.EXTRA_LASTKNOWN);

                if (loc==null) {
                    msg=intent.getStringExtra(LocationPoller.EXTRA_ERROR);
                }
                else {
                    msg="TIMEOUT, lastKnown="+loc.toString();
                }
            }
            else {
                msg=loc.toString();
                _location=loc;
                getServerAddress(context);
                createMessage();
                if(!CommonRoutines.isNetworkAvailable(context))
                {
                    return;
                }
                SocketManager socketManager = new SocketManager();
                socketManager.execute();
            }

            if (msg==null) {
                msg="Invalid broadcast received!";
            }
        }
        catch (Exception e) {
            Log.e(getClass().getName(), "Exception appending to log file", e);
        }
    }

    private boolean postLocation()
    {
        boolean result = false;
        InetAddress inetAddress=null;
        Socket socket=null;
        DataOutputStream outputStream = null;
        try
        {
            inetAddress = InetAddress.getByName(X.X.X.X);
            socket = new Socket(inetAddress,XXXX);
            outputStream= new DataOutputStream(socket.getOutputStream());
            outputStream.write(_message.getBytes());
            socket.close();
        }
        catch (UnknownHostException e)
        {
                String s = e.getMessage();
        }
        catch (IOException e)
        {
            String s = e.getMessage();
        }
        finally
        {
           if(socket!=null){
               try
               {
                 socket.close();
               }
               catch (IOException e){}
           }

           if(outputStream!=null)
           {
               try {
                    outputStream.close();
               }
               catch (IOException e){}

           }
        }
        return  result;
    }

    private void createMessage()
    {
        try{
            JsonGeoLocation geoLocation = new JsonGeoLocation();
            JsonGeoPosition geoPostion = new JsonGeoPosition();
            _message="";

            Time now = new Time();
            now.setToNow();

            geoLocation.setDriverId(_driverId);
            geoLocation.setLocationDateTime(DateFormat.getDateTimeInstance().format(new Date()));
            geoPostion.setLatitude(_location.getLatitude());
            geoPostion.setLongitude(_location.getLongitude());
            geoLocation.setGeoPosition(geoPostion);

            Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
            _message = gson.toJson(geoLocation)+"-EOM-";
        }
        catch (Exception e){
            String s = e.getMessage();
        }
    }

    public class SocketManager extends AsyncTask<Void,Integer,Void>
    {
        @Override
        protected Void doInBackground(Void... voids) {
            postLocation();
            return null;
            //return null;  //To change body of implemented methods use File | Settings | File Templates.
        }
    }
}

below is example log

2012-10-23 00:00:48.0135 . Connection request initiated... 2012-10-23 00:00:48.0135 . Connection request accepted... 2012-10-23 00:00:48.0135 . Connection Id: 28383573 2012-10-23 00:00:48.3171 . Entered into OnDataIn ConnectionId: 28383573 2012-10-23 00:00:48.3176 . Data received:    {"F0":7,"F2":{"F0":51.57605743408203,"F1":0.09495019912719727},"F1":"Oct 23, 2012 12:00:48 AM"}-EOM- 2012-10-23 00:00:48.3176 . Received: JobId: 7 DateTime: 23/10/2012 00:00:48   Latitude:
51.576057434082 Longitude: 0.0949501991271973 2012-10-23 00:00:48.3966 . Connection disconnected... 2012-10-23 00:57:57.9396 . 
2012-10-23 00:57:57.9396 . Connection request initiated... 2012-10-23 00:57:57.9396 . Connection request accepted... 2012-10-23 00:57:57.9396 . Connection Id: 17817267 2012-10-23 00:57:58.2641 . Entered into OnDataIn ConnectionId: 17817267 2012-10-23 00:57:58.2646 . Data received:    {"F0":7,"F2":{"F0":51.57625961303711,"F1":0.09462833404541016},"F1":"Oct 23, 2012 12:58:01 AM"}-EOM- 2012-10-23 00:57:58.2646 . Received: JobId: 7 DateTime: 23/10/2012 00:58:01   Latitude:
51.5762596130371    Longitude: 0.0946283340454102 2012-10-23 00:57:58.3396 . Connection disconnected... 2012-10-23 00:58:55.4589 .
0

There are 0 best solutions below