Precise location identification is a critical factor in today’s mobile applications, especially for such components as directions, training. However, as the location can be tracked continuously, it can be seen that this causes great strain on battery power. The following document represents technology advances in terms of location tracking while at the same time preserving battery power.
They suffer from high battery consumption as soon as the devices engage in constant tracking. GPS vs. WiFi and Cellular vs. GPS Balancing accuracy between GPS/WiFi and Cellular. This is because the OG Trons use background execution restrictions on the newer Android versions. When navigation is required due to low visibility or at night, lack of timely or correct location information of the vhicle.
Next set the minTime and minDistance values as per need for receiving location updates. Do not update more often than you have to since this may slow the application down.
Geofencing API shall be used for applications where the tracking does not have to be constant. I recommend that you set up the location updates only if a geofence event has been triggered.
This way, take data at intervals and thus minimize wake ups by using the batch location updates method.
Example: When using Google’s FusedLocationProvider you should use LocationRequest.setMaxWaitTime().
For critical use cases (e.g., BLE-trigged tracking), use a foreground service with a persistent notification in order to observe the Android background execution restrictions.
I present how to Handle Background Execution Restrictions. For periodic updates of the GPS the WorkManager or AlarmManager should be used. For continuous tracking, meet Android’s foreground service requirements Continuously tracking Effective Methods for tracking, meet Android, delivering foreground service requirements. Implementation Steps
1. Setup Fused Location Provider
LocationRequest locationRequest = LocationRequest.newLocationRequest(); locationRequest.setLayoutParams(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); locationRequest.setInterval(60000); // 1 min locationRequest.setFastestInterval(30000); // 30 seconds
public class BLEConnectionManager {
private static final String TAG = "BLEConnectionManager";
private final Context context;
private final FusedLocationProviderClient fusedLocationClient;
public BLEConnectionManager(Context context) {
this.context = context;
this.fusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
}
public void startLocation() {
Log.d(TAG, "Starting BLE scan...");
// Create the location request
LocationRequest locationRequest = new LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY, 180000) // Interval: 180 seconds
.setMinUpdateIntervalMillis(5000) // Minimum interval: 5 seconds
.setMaxUpdateDelayMillis(108000) // Maximum delay: 108 seconds
.setWaitForAccurateLocation(true) // Wait for accurate location
.build();
Log.d(TAG, "alertActivityId: Starting BLE scan...");
// Retrieve the stored alert activity ID from SharedPreferences
int storedAlertActivityId = getAlertActivityId(context);
Log.d(TAG, "Stored alertActivityId: " + storedAlertActivityId);
if (storedAlertActivityId != 0) {
Log.d(TAG, "Using stored alertActivityId: " + storedAlertActivityId);
startLocationTracking();
} else {
String url = "https://api.resq-app.com/v1/alarm/get-my-active-alarm";
sendGetAlertDetailsRequest(url);
}
}
2.Foreground Service
Make a foreground service with an ongoing notification. Make sure the service have correct request codes (ACCESS_FINE_LOCATION, FOREGROUND_SERVICE).
3. Offline Data Storage
SharedPreferences sharedPreferences = getSharedPreferences("LocationData", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("location", locationDataJson);
editor.apply();
4. Send Data to Server use below callback data
private final LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
Log.d(TAG, "No location data available.");
return;
}
for (Location location : locationResult.getLocations()) {
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Log.d(TAG, "Location data: Latitude=" + latitude + ", Longitude=" + longitude);
// Prepare JSON object with location data
JSONObject locationData = new JSONObject();
try {
locationData.put("Latitude", latitude);
locationData.put("Longitude", longitude);
locationData.put("Timestamp", getCurrentTimestamp());
// Call method to send location data
sendLocationDataToServer(locationData);
} catch (JSONException e) {
Log.e(TAG, "Failed to create JSON object for location data.", e);
}
}
}
}
Allow users to request permission for location for location depending on the app’s requirements and provide the users with the reasons for the same. To get improved APIs, use the most recent libraries of Google Play Services. One such organization is Android, which has Battery Historian that the organization can use to monitor the battery impact. Run the application in different settings to test its reliability and the efficiency of the system.
It should be noted that it can be provided effectively by utilizing the correct location providers as well as providing appropriate update intervals as well as following the standard practices for being executed in the background with battery efficiency
Ready to transform your business with our technology solutions? Contact Us today to Leverage Our Android Expertise.
0