How can I programmatically reset and download new A-GPS data in an Android application? In other words, how do the “Manage A-GPS state” tools work in the GPS Status & Toolbox app?
You should be able to use
LocationManager.sendExtraCommand(String provider, String command, Bundle extras). This will allow you to delete all or part of the GPS data, so it will redownload it. The docs are here, but a quick rundown of the arguments, referenced from this code(for a GPS Provider):
For extras, if you pass
null, it will delete all data. If you want to delete specific data only(such as just the almanac or position), you can use the flags found in this function as extras in the bundle.
Don’t forget to add
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS to your permission list in the manifest!
So far, the best answer to my question seems to be a combination of @Geobits’ response and the XTRA injection code discussed in Problems with sendExtraCommand and force_xtra_injection. Based on this, I am currently using the following:
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,"delete_aiding_data", null); Bundle bundle = new Bundle(); locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle); locationManager.sendExtraCommand("gps", "force_time_injection", bundle);
If anyone has additional ideas on how to improve this, or how to determine the best times to clear and download new GPS data, I would be very interested to hear.