Closed spatialbits closed 2 years ago
Have you consulted the changelog and reviewed the Setup Steps for chsnges?
Yes, I did look through both the Changelog and Android set up steps. Nothing stood out, but it's possible I could have missed something.
Are you observing unfiltered $ adb logcat
for errors?
This is the output from running adb logcat filterspecs '*:W'
(or in details if you prefer)
I am not spotting anything obvious that looks like a problem with registering and running the background process. I did spot this bit:
09-30 09:29:06.557 2646 2646 E audit : type=1400 audit(1633019346.541:612): avc: denied { read } for pid=31399 comm="ca.the.app" name="max_map_count" dev="proc" ino=247420 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:proc:s0 tclass=file permissive=0 SEPF_SM-T580_8.1.0_0008 audit_filtered
09-30 09:29:06.557 2646 2646 E audit : type=1300 audit(1633019346.541:612): arch=40000028 syscall=322 per=8 success=no exit=-13 a0=ffffff9c a1=c74603ef a2=20000 a3=0 items=0 ppid=2661 pid=31399 auid=4294967295 uid=10171 gid=10171 euid=10171 suid=10171 fsuid=10171 egid=10171 sgid=10171 fsgid=10171 tty=(none) ses=4294967295 comm="ca.the.app" exe="/system/bin/app_process32" subj=u:r:untrusted_app:s0:c512,c768 key=(null)
09-30 09:29:06.558 2646 2646 E audit : type=1327 audit(1633019346.541:612): proctitle="ca.the.app"
but am unsure if it's significant.
in the background the headless task receives location updates and processes them.
The headlessTask does not fire in the background -- it fires when the app is terminated. There are 3 states for an Android app:
Is that a change? I had been successfully using the headlessTask to write incoming locations to a text file while the app is in any of the foreground/background/terminated states.
Is that a change?
No. This has been the case for years.
When I roll the version back to 1.10 I am able to set a breakpoint inside the function registered in the headless task and it will be called when app is in foreground and background, I am doubting now if it is called when terminated but am almost certain that it is.
Either way, on latest version it does not fire the headless task.
called when app is in foreground and background
App
instance is rendered into the Android MainActivity
. MainActivity
.MainActivity
(which is not as easy as you might think). A typical event within the Java code looks like this:public void _onLocationChange(TSLocation location) {
if (!isMainActivityActive()) { // <-- Headless events are fired only when the app is terminated.
HeadlessEventBroadcaster.post(new HeadlessEvent(mContext, EVENT_LOCATION, location));
}
fireLocationChangeListeners(location);
}
I suggest you have a close look at the plugin logs with $ adb logcat *:S TSLocationManager
. See Wiki Debugging for more information about observing logs.
Headless events were never intended to be received while an app is NOT terminated. The only way that could happen is an Android configuration issue on your end causing the SDK's isMainActivityActive()
method to return incorrect result.
This method is rather complex.
public Boolean isMainActivityActive() {
Boolean isActive = false;
if (mContext == null) {
return isActive;
}
if (Util.isRunningTest()) {
return true;
}
ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String launchActivityName = "";
PackageManager pm = mContext.getPackageManager();
Intent launchIntent = pm.getLaunchIntentForPackage(mContext.getPackageName());
if (launchIntent != null) {
if (launchIntent.getComponent() != null) {
launchActivityName = launchIntent.getComponent().getClassName();
} else {
TSLog.logger.warn(TSLog.warn("launchIntent.getComponent() is null"));
}
} else {
TSLog.logger.warn(TSLog.warn( "isMainActivityActive received null from getLaunchIntentForPackage: " + mContext.getPackageName()));
}
try {
String packageName = mContext.getPackageName();
String mainActivityName = TSConfig.getInstance(mContext).getMainActivityName();
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (ActivityManager.RunningTaskInfo task : tasks) {
if (launchActivityName.equals(task.baseActivity.getClassName())) {
// Easy out case.
isActive = true;
break;
}
if ((task.baseActivity != null) && packageName.equalsIgnoreCase(task.baseActivity.getPackageName())) {
// If TSLocationManagerActivity is active, we're necessarily alive.
if (task.baseActivity.getClassName().equals(TSLocationManagerActivity.class.getName())) {
isActive = true;
break;
}
// Get "flavorless" package-name (ie: if this is a flavored app, eg: com.foo.flavor, return com.foo
if (mainActivityName == null) {
String[] parts = task.baseActivity.getClassName().split("\\.");
mainActivityName = parts[parts.length-1];
}
String flavorlessPackageName = BuildConfigUtils.getBuildConfigPackageName(mContext);
String taskActivityName = flavorlessPackageName + "." + mainActivityName;
isActive = (task.baseActivity.getClassName().equals(taskActivityName));
if (isActive) break;
}
}
} catch (java.lang.SecurityException e) {
TSLog.logger.warn(TSLog.warn("BackgroundGeolocationService attempted to determine if Main Activity is active but was stopped due to a missing permission. Please add the permission 'android.permission.GET_TASKS' to your AndroidManifest. See Installation steps for more information"));
throw e;
}
if (isActive) {
// Don't print log memssage when isActive.
//TSLog.logger.debug("YES");
} else {
TSLog.logger.debug("NO");
}
return isActive;
}
The plugin's Android Headless Mode has existed like this for about 6 years (older than Flutter). It was originally developed for the React Native and Cordova versions of the plugin and has always been designed to operate only when the app is terminated. Headless events should never be received when the app is in the foreground or background.
That is interesting. In that case something is definitely not right.
There was a change some time ago to the plugin's Java method boolean isManActivityActive
above. It wasn't working correctly for Android apps configured for productFlavors
, eg:
If you have a configuration problem in your Android app, you should see interesting ⚠️ messages in adb logcat
while using the lastest version.
android {
...
flavorDimensions "app"
productFlavors {
qa {
dimension "app"
applicationIdSuffix ".qa"
versionCode 1
versionName "1.0"
}
dev {
dimension "app"
applicationIdSuffix ".dev"
versionCode 1
versionName "1.0"
}
}
}
I am able to run the example app and the headless task does fire as expected.
If isMainActivityActive is the culprit I'm not sure how to test. The logs do not output messages regarding the GET_TASKS
perm. Any suggestions there?
Start by posting your two gradle files and AndroidManifest
I should add that I can confirm the plugin's TrackingService continues to fire events after I forcefully terminate the app, but no sign of the headless task being called.
Am I correct in my understanding that when I force quit the app, the headless task should begin to fire?
I notice that the headless task service is registered under the transistorsoft package name:
10-04 09:45:10.576 7061 7113 I TSLocationManager: "headlessJobService": "com.transistorsoft.flutter.backgroundgeolocation.HeadlessTask",
I mention because I also noticed in another issue that the package name is key for the headless task to fire. Is this the correct service name?
There's nothing more to do with headless task other than what's documented. See api docs Config.enableHeadless
Headless events were never intended to be received while an app is NOT terminated. The only way that could happen is an Android configuration issue on your end causing the SDK's isMainActivityActive() method to return incorrect result.
Aside from build flavours, what configuration is capable of making isMainActivityActive()
return an incorrect result?
While watching logcat (see wiki debugging), boot your app then terminate app.
Post your logs here
On Mon, Oct 4, 2021 at 2:53 PM Adam Valair @.***> wrote:
Headless events were never intended to be received while an app is NOT terminated. The only way that could happen is an Android configuration issue on your end causing the SDK's isMainActivityActive() method to return incorrect result.
Aside from build flavours, what configuration is capable of making isMainActivityActive() return an incorrect result?
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/transistorsoft/flutter_background_geolocation/issues/644#issuecomment-933761441, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEGNWX6H7BSH7JMI2IXXN7TUFHZ3VANCNFSM5FA3Q2AA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
-- /**
- Transistor Software https://www.transistorsoft.com
- 514 994 2585 */
Boot on a real device instead of emulator.
Xaomi Mi A1
TERMINATE_EVENT ignored (MainActivity is still active).
Are you sure you terminated the app, not just sent it to background?
I went to the app switcher, then swipe up to dismiss the app.
In your AndroidManifest, why have you done this to your MainActivity
?
android:launchMode="singleTop"
I'm unsure what the rationale for that was, but I assume it would be from an older flutter create template.
If I set it to standard
there is no change in behaviour.
I've added some extra log messages to method isMainActivityActive
which should illuminate the issue. Install the plugin from git as follows. Then perform the same terminate sequence and provide corresponding logs as above.
dependencies:
flutter_background_geolocation:
git:
url: https://github.com/transistorsoft/flutter_background_geolocation.git
ref: issue-644
I pushed another commit. Do a flutter pub get
and re-do the test and logs.
this is the same version as last time.
The latest commit doesn't have this log message anymore.
10-05 10:41:21.070 10338 10803 D TSLocationManager: [c.t.l.a.BackgroundGeolocation isMainActivityActive] *** isRunningTest: true
Remove your pubspec.lock and flutter pub get
again.
Some headless activity there now.
Ok, there was a problem in my isMainActivityActive
. I added a small bit of code recently to detect if the plugin was running in a test environment. The premise for detecting test environment was flawed.
OK. Do you have an idea when a fix might work its way into pub.dev?
It will be published soon. In the meantime, you can use this branch. This branch is the next version.
Thanks
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. You may also mark this issue as a "discussion" and I will leave this open.
Closing this issue after a prolonged period of inactivity. Fell free to reopen this issue, if this still affecting you.
Your Environment
flutter doctor
):final _bgConfig = bg.Config( desiredAccuracy: bg.Config.DESIRED_ACCURACY_HIGH, distanceFilter: 5.0, debug: kDebugMode, logLevel: bg.Config.LOG_LEVEL_WARNING, reset: true, activityRecognitionInterval: 3000, stopOnTerminate: false, allowIdenticalLocations: false, enableHeadless: true, preventSuspend: true, notification: bg.Notification( title: "App", text: "Location service", ), locationAuthorizationRequest: 'Always', disableStopDetection: false, showsBackgroundLocationIndicator: true, // ios only, backgroundPermissionRationale: bg.PermissionRationale( title: "Allow {applicationName} to access to this device's location in the background?", message: "When a tracking is active, {applicationName} needs to be able to collect locations while running in the background, please enable {backgroundPermissionOptionLabel} location permission. ", positiveAction: "Change to {backgroundPermissionOptionLabel}", negativeAction: "Cancel"), );
Future _configure() async {
Completer configComplete = Completer();
bg.BackgroundGeolocation.onLocation(_onLocationSuccess, _onLocationFail);
bg.BackgroundGeolocation.onMotionChange(_onMotionChange);
bg.BackgroundGeolocation.onConnectivityChange(_onConnectivityChange);
bg.BackgroundGeolocation.onEnabledChange(_onEnabledChange);
bg.BackgroundGeolocation.ready(_bgConfig).then((bg.State state) {
_log.fine('background tracking is ready. Enabled: ${state.enabled}');
_configured = true;
configComplete.complete();
}, onError: (err) {
_configured = false;
configComplete.completeError(err);
});
return configComplete.future;
}
Future start() async {
if (!_configured) { await _configure(); }
final bgState = await bg.BackgroundGeolocation.state; if (bgState.enabled) { return Future.value(bgState); }
Future startFuture;
startFuture = bg.BackgroundGeolocation.start().then( (state) { if (!state.enabled) { _log.severe('failed to start.'); } return state; }, onError: (err) { _log.severe('start error: ${err.toString()}'); return err; }, );
return startFuture; }
in main app widget
Expected Behavior
TrackMonitor.headlessGeolocationTask
should be called when location events fire.Actual Behavior
TrackMonitor.headlessGeolocationTask
does not fire.Steps to Reproduce
Context
Track locations in the foreground and background on Android.
Debug logs
Logs
``` --------- beginning of kernel --------- beginning of system --------- beginning of crash --------- beginning of main 09-29 14:29:18.066 11268 11310 I TSLocationManager: [c.t.l.logger.LoggerFacade$a a] 09-29 14:29:18.066 11268 11310 I TSLocationManager: ╔═════════════════════════════════════════════ 09-29 14:29:18.066 11268 11310 I TSLocationManager: ║ TSLocationManager version: 3.1.33 (389) 09-29 14:29:18.066 11268 11310 I TSLocationManager: ╠═════════════════════════════════════════════ 09-29 14:29:18.066 11268 11310 I TSLocationManager: ╟─ Google sdk_gphone_arm64 @ 11 (flutter) 09-29 14:29:18.066 11268 11310 I TSLocationManager: { 09-29 14:29:18.066 11268 11310 I TSLocationManager: "activityRecognitionInterval": 3000, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "allowIdenticalLocations": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "authorization": {}, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "autoSync": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "autoSyncThreshold": 0, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "backgroundPermissionRationale": { 09-29 14:29:18.066 11268 11310 I TSLocationManager: "title": "Allow {applicationName} to access to this device's location in the background?", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "message": "When tracking is active, {applicationName} needs to be able to collect locations while running in the background, please enable {backgroundPermissionOptionLabel} location permission. ", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "positiveAction": "Change to {backgroundPermissionOptionLabel}", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "negativeAction": "Cancel" 09-29 14:29:18.066 11268 11310 I TSLocationManager: }, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "batchSync": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "configUrl": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "debug": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "deferTime": 0, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "desiredAccuracy": -1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "desiredOdometerAccuracy": 100, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "disableAutoSyncOnCellular": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "disableElasticity": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "disableLocationAuthorizationAlert": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "disableMotionActivityUpdates": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "disableStopDetection": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "distanceFilter": 5, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "elasticityMultiplier": 1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "enableHeadless": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "enableTimestampMeta": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "extras": {}, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "fastestLocationUpdateInterval": -1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "foregroundService": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "geofenceInitialTriggerEntry": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "geofenceModeHighAccuracy": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "geofenceProximityRadius": 1000, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "geofenceTemplate": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "headers": {}, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "headlessJobService": "com.transistorsoft.flutter.backgroundgeolocation.HeadlessTask", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "heartbeatInterval": -1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "httpRootProperty": "location", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "httpTimeout": 60000, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "isMoving": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "locationAuthorizationRequest": "Always", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "locationTemplate": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "locationTimeout": 60, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "locationUpdateInterval": 1000, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "locationsOrderDirection": "ASC", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "logLevel": 2, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "logMaxDays": 3, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "maxBatchSize": -1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "maxDaysToPersist": 1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "maxRecordsToPersist": -1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "method": "POST", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "minimumActivityRecognitionConfidence": 75, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "motionTriggerDelay": 0, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "notification": { 09-29 14:29:18.066 11268 11310 I TSLocationManager: "layout": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "title": "TheApp", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "text": "Location service", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "color": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "channelName": "TSLocationManager", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "smallIcon": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "largeIcon": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "priority": 0, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "sticky": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "strings": {}, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "actions": [] 09-29 14:29:18.066 11268 11310 I TSLocationManager: }, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "params": {}, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "persist": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "persistMode": 2, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "schedule": [], 09-29 14:29:18.066 11268 11310 I TSLocationManager: "scheduleUseAlarmManager": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "speedJumpFilter": 300, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "startOnBoot": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "stationaryRadius": 25, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "stopAfterElapsedMinutes": 0, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "stopOnStationary": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "stopOnTerminate": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "stopTimeout": 5, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "triggerActivities": "in_vehicle, on_bicycle, on_foot, running, walking", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "url": "", 09-29 14:29:18.066 11268 11310 I TSLocationManager: "useSignificantChangesOnly": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "enabled": true, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "schedulerEnabled": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "trackingMode": 1, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "odometer": 940022.75, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "isFirstBoot": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "didLaunchInBackground": false, 09-29 14:29:18.066 11268 11310 I TSLocationManager: "didDeviceReboot": false 09-29 14:29:18.066 11268 11310 I TSLocationManager: } 09-29 14:29:18.068 11268 11305 D TSLocationManager: [c.t.l.http.HttpService startMonitoringConnectivityChanges] 09-29 14:29:18.068 11268 11305 D TSLocationManager: 🎾 Start monitoring connectivity changes 09-29 14:29:18.068 11268 11310 I TSLocationManager: [c.t.l.logger.LoggerFacade$a a] 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╔═════════════════════════════════════════════ 09-29 14:29:18.068 11268 11310 I TSLocationManager: ║ DEVICE SENSORS 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╠═════════════════════════════════════════════ 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╟─ ✅ ACCELEROMETER: {Sensor name="Goldfish 3-axis Accelerometer", vendor="The Android Open Source Project", version=1, type=1, maxRange=39.300007, resolution=2.480159E-4, power=3.0, minDelay=10000} 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╟─ ✅ GYROSCOPE: {Sensor name="Goldfish 3-axis Gyroscope", vendor="The Android Open Source Project", version=1, type=4, maxRange=16.460001, resolution=0.001, power=3.0, minDelay=10000} 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╟─ ✅ MAGNETOMETER: {Sensor name="Goldfish 3-axis Magnetic field sensor", vendor="The Android Open Source Project", version=1, type=2, maxRange=2000.0, resolution=0.5, power=6.7, minDelay=10000} 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╟─ ⚠️ SIGNIFICANT_MOTION: none. Motion-detection system performance will be degraded 09-29 14:29:18.068 11268 11310 I TSLocationManager: ╚═════════════════════════════════════════════ 09-29 14:29:18.068 11268 11310 I TSLocationManager: [c.t.l.logger.LoggerFacade$a a] 09-29 14:29:18.068 11268 11310 I TSLocationManager: ✅ Google Play Services: connected (version code:12451000) 09-29 14:29:18.068 11268 11310 D TSLocationManager: [c.t.l.logger.LoggerFacade$a a] 09-29 14:29:18.068 11268 11310 D TSLocationManager: ℹ️ Load last odometer location: Location[TSLocationManager 57.443398,-125.084000 hAcc=5 t=?!? et=?!? vAcc=??? sAcc=??? bAcc=??? {Bundle[{odometer=940022.75}]}] 09-29 14:29:18.074 11268 11317 D TSLocationManager: [c.t.l.http.HttpService a] 09-29 14:29:18.074 11268 11317 D TSLocationManager: ╔═════════════════════════════════════════════ 09-29 14:29:18.074 11268 11317 D TSLocationManager: ║ 📶 Connectivity change: connected? true 09-29 14:29:18.074 11268 11317 D TSLocationManager: ╠═════════════════════════════════════════════ 09-29 14:29:18.076 11268 11305 I TSLocationManager: [c.t.l.a.BackgroundGeolocation d] 09-29 14:29:18.076 11268 11305 I TSLocationManager: 🎾 Start monitoring location-provider changes 09-29 14:29:18.086 11268 11318 D TSLocationManager: [c.t.l.data.sqlite.b prune] 09-29 14:29:18.086 11268 11318 D TSLocationManager: ℹ️ PRUNE -1 days 09-29 14:29:18.102 11268 11305 D TSLocationManager: [c.t.l.a.BackgroundGeolocation a] 09-29 14:29:18.102 11268 11305 D TSLocationManager: 🔴 Cleared callbacks 09-29 14:29:18.103 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/location 09-29 14:29:18.104 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/motionchange 09-29 14:29:18.105 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/activitychange 09-29 14:29:18.105 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/geofenceschange 09-29 14:29:18.105 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/geofence 09-29 14:29:18.106 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/heartbeat 09-29 14:29:18.106 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/http 09-29 14:29:18.106 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/schedule 09-29 14:29:18.106 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/connectivitychange 09-29 14:29:18.107 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/enabledchange 09-29 14:29:18.107 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/providerchange 09-29 14:29:18.107 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/powersavechange 09-29 14:29:18.107 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/notificationaction 09-29 14:29:18.108 11268 11305 D TSLocationManager: [c.t.f.b.streams.StreamHandler register] com.transistorsoft/flutter_background_geolocation/events/authorization 09-29 14:29:19.704 11268 11268 D TSLocationManager: [c.t.f.b.streams.StreamHandler onListen] location 09-29 14:29:19.704 11268 11268 D TSLocationManager: [c.t.f.b.streams.StreamHandler onListen] motionchange 09-29 14:29:19.705 11268 11268 D TSLocationManager: [c.t.f.b.streams.StreamHandler onListen] connectivitychange 09-29 14:29:19.705 11268 11268 D TSLocationManager: [c.t.f.b.streams.StreamHandler onListen] enabledchange 09-29 14:29:19.715 11268 11268 D TSLocationManager: [c.t.l.adapter.TSConfig d] ℹ️ Persist config, dirty: [activityRecognitionInterval, backgroundPermissionRationale, backgroundPermissionRationale.title, backgroundPermissionRationale.message, backgroundPermissionRationale.positiveAction, backgroundPermissionRationale.negativeAction, desiredAccuracy, distanceFilter, enableHeadless, extras, headers, headlessJobService, isMoving, logLevel, notification, notification.title, notification.text, params, schedule, stopOnTerminate] 09-29 14:29:19.727 11268 11320 I TSLocationManager: - Enable: true → true, trackingMode: 1 ```