Android location update every minute

大兔子大兔子 提交于 2019-12-25 07:34:00

问题


I am currently writing an application that receives location data every minute (or other specified amount of time) and thes send it to server.

The problem that I have noticed is: When I use my application connected to power source it works perfectly - sends updates with defined interval. When I use it on battery it sends updates randomly.

For my application I use timer to specify interval of update. This timer runs in Background service. I request updates in timer and remove updates when I receive location. Fragment of my code:

    private class mainTask extends TimerTask
    { 
        public void run() 
        {
            toastHandler.sendEmptyMessage(0); 
        }
    } 

    private final Handler toastHandler = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            date = date.getInstance(); //used to set time of update.

            if(!GPSupdating)
            {
                locationManager.requestLocationUpdates("gps", 0, 0, locationListenerGPS);
                GPSupdating = true;
            }
        }
    };

My location listener:

    LocationListener locationListenerGPS = new LocationListener() 
    {

        public void onLocationChanged(Location updatedLocation) 
        {
            myGPSLocation = updatedLocation;
            haveLocationGPS = true;
            locationManager.removeUpdates(locationListenerGPS);
            GPSupdating = false;
        }

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

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
    };  

Do you have any idea why this is not working correctly?


回答1:


It's not good solution - enable/disable listener on each minute.

Better to try following things:

1) Set minimal update time (in requestLocationUpdates ) to one minute and send data to server in update listener:

locationManager.requestLocationUpdates("gps", 60*1000, 0, locationListenerGPS);

If you need more accurate update intervals, than:

2) Start separate thread and enable GPS updates on it. Store last location in thread or service variable. Also start timer and on timer tick send location to the server.




回答2:


Try using Criteria to manage the power. Set power requirement to POWER_LOW. You will loose some accuracy though.

LocationManager locationManager= (LocationManager) getSystemService(context);
        Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            provider = locationManager.getBestProvider(criteria, true);



回答3:


You will not save energy by enabling and disabling GPS once per minute. Either choose a greater intervall (5 minute) or get the location evry second.
Then store the location in a lastValidLocation filed, start your own Timer, and once a minute read out lastValidLocation. and send to server if changed.



来源:https://stackoverflow.com/questions/17145241/android-location-update-every-minute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!