basicairdata / gpslogger Goto Github PK
View Code? Open in Web Editor NEWA GPS logger for Android mobile devices
Home Page: http://www.basicairdata.eu/projects/android/android-gps-logger/
License: GNU General Public License v3.0
A GPS logger for Android mobile devices
Home Page: http://www.basicairdata.eu/projects/android/android-gps-logger/
License: GNU General Public License v3.0
Would be great, if I could edit the details of a track, e.g. if a track is wrong categorized as "by car" Track.
Thanks in advance :-)
Actually the Exporter creates the temporary files in /GPSLogger/AppData public folder, but it should create them into the FilesDir private space and pass them to other apps using a URI generated by a FileProvider.
The proper way to share files in Android is well explained here.
Following this way we'll have 2 benefits:
Some users report that sometimes the setting "Keep screen on" is not correctly applied.
The problem could be caused by a missed "APPLY_SETTINGS" MessageBus signal.
LoadPreferences()
must be put on "onResume()".
On Android 6+ the users can grant / denied run-time the permission to access to phone storage.
If that permission is denied, the app cannot Export, Share and View tracks from tracklist.
It is necessary to find a "good" way to disable the menu items of the contextual tracklist menu.
We have different ways to proceed. We could, for example:
The first two are confusing, because some users may report something like: "I cannot export / share my tracks"; The third may be confusing ("Unable? Why?") or annoying, because "I have already denied the permission";
Personally I tend to the "conscious user" approach.
Ideas?
The app needs a first run screen (to download the EGM file).
Something like the following:
In order to use the right altitude above the sea level, we suggest to download the EGM96 grid file.
You can also download it later, enabling the EGM Automatic Altitude Correction on settings.
[ Download it ] [ No, thanks ]
Download it: The app downloads the EGM grid (showing the progress dialog like on settings) and enables EGM correction when the download is finished;
No, thanks: The app enables the "projected on the ground" option for displaying altitude in Google Earth.
In fact some Google Play users reported "the track is not visible in Google Earth" because they tried the app without EGM grid and using the "Absolute" altitude mode (ie. out of the box).
The app must show a first run setup in order to adjust that.
The first run setup has to run after the real time permissions check (and requests) for Android 6+, because it needs to have internet access and to write the EGM file into the SD.
Hi,
What I really miss, is a possibility to
so I could find them more easy later on.
Thanks for the great and handy tool, anyway!!
BR
Nico
Many programs are only compatible with the version 1.0 of the standard GPX;
But other programs are only compatible with the version 1.1 (like Garmin Connect) of the standard.
It should be nice to add a setting to choose which GPX standard use for exportation.
Something like:
Version of GPX standard
v.1.0
v.1.1
A user's feedback on Google Play reports the following issue:
Only AFTER I install 'Google Earth' I am able to VIEW the route also with OTHER installed applications
A little correction has to be made in order to discover if any viewer is available (like Locus Map) and, in case, show the "View" menuitem. The user will be able to choose his preferred viewer.
At the moment (v2.1.4) the "View in Google Earth" menu opens a chooser in case multiple viewers are installed. The problem is that that menu appears ONLY if Google Earth is installed.
That issue forces users to install Google Earth in order to view tracks using their preferred viewer (also NOT G.E.)
A user's feedback on Google Play reports problems to import GPX files into Garmin MapSource.
The reporting needs to be deepened.
I'm working on it in order to solve the problem in the next app update.
Currently all eventbus messages are strings. Strings are parsed and tokenized by the subscribers in order to re-obtain their data. But the operation with strings have a high computational cost and a long process time.
Messages could be divided in 3 categories:
SHORT: short EVENTBUS.MSGTYPE
EventBus.getDefault().post("APP_RESUME");
EventBus.getDefault().post("APP_PAUSE");
EventBus.getDefault().post("NEW_TRACK");
EventBus.getDefault().post("UPDATE_FIX");
EventBus.getDefault().post("UPDATE_TRACKLIST");
EventBus.getDefault().post("UPDATE_SETTINGS");
EventBus.getDefault().post("REQUEST_ADD_PLACEMARK");
EventBus.getDefault().post("ADD_PLACEMARK");
EventBus.getDefault().post("APPLY_SETTINGS");
EventBus.getDefault().post("UPDATE_TRACK");
NORMAL: short EVENTBUS.MSGTYPE + long ID
EventBus.getDefault().post("DELETE_TRACK " + data.get(ii).getId());
EventBus.getDefault().post("EXPORT_TRACK " + data.get(i).getId());
EventBus.getDefault().post("VIEW_TRACK " + data.get(i).getId());
EventBus.getDefault().post("SHARE_TRACK " + data.get(i).getId());
EventBus.getDefault().post("TRACK_EXPORTED " + track.getId());
EventBus.getDefault().post("TRACKLIST_SELECTION " + track.getId());
EventBus.getDefault().post("INTENT_SEND " + trackid);
EventBus.getDefault().post("TOAST UNABLE_TO_WRITE_THE_FILE " + track.getId());
LONG: short EVENTBUS.MSGTYPE + long ID + long Value
EventBus.getDefault().post("TRACK_SETPROGRESS " + track.getId() + " " + progress);
Hi,
I installed the app on a AVD api level 25, but on the Track app I can't see the buttons is that normal ?
Using version 95 on a Samsung S7 Android 8.0.0 version
URL used :
HTTP-Methode : GET
SSL-Certificate : OK
HTTP-TEST :
Error message (unexpected code response) : Invalid coordinates
Where is the problem ???
Thanks for supporting
Google reports 1 crash at GPSActivity.java:118:
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2924)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2985)
at android.app.ActivityThread.-wrap14 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1635)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6692)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)Caused by: java.lang.NullPointerException:
at eu.basicairdata.graziano.gpslogger.GPSActivity.onCreate (GPSActivity.java:118)
at android.app.Activity.performCreate (Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2877)
// Check for runtime Permissions (for Android 23+)
118 if (!GPSApplication.getInstance().isPermissionsChecked()) {
119 GPSApplication.getInstance().setPermissionsChecked(true);
120 CheckPermissions();
121 }
Would be nice to have a thread-safe structure for Tracklist, in order to allow all operations from different threads. Also performances will be better.
The goal is to add the number of satellites used for the FIX to every LocationExtended.
The code in order to retrieve the number of used satellites is already present (and commented out).
The value must be saved into the DB for every FIX, like for the "in-view satellites" field.
That operation needs a DB upgrade, in order to add the new INTEGER data field.
Old saved locations will have "NOT_AVAILABLE" value.
No needs to show that value into GPS FIX tab: we only want to start saving it and, in the future, export it in <sat>
tag of gpx files.
Hello,
Some time ago I open a new issue #3 with GPS that stops tracking in specific conditions. Now I know what is "specific conditions".
GPS stop tracking when I make a call or answering a call. For example:
I start tracking with GPS Logger.
I use home button to minimize the app.
I make a call.
And now GPS is disconnected and GPS Logger stops the recording.
But when I enable "airplane mode" (sometimes called "offline mode") in my phone GPS Logger works very well.
Thanks for help.
Jacek.
Investigate behavior of sd saved track
Currently the thumbnail of each tracks is loaded on-the-fly by a tracklist card when needed, causing:
It would be fine to keep in memory the thumbnail of every track of the tracklist.
I tried including Picasso library with a good result (I left commented out the few lines of code I've added to try it). But the use of Picasso for very little and static images isn't an optimized solution. It would be better to include the thumb Bitmap directly into each Track object, maybe including a synchronous and an asynchronous setter, and a getter (for the cards).
Thus, I think we could implement a way to enable these features:
Would be nice to add the .TXT exportation format, only for spreadsheets lovers :)
A good standard could be the following: http://www.gpsvisualizer.com/tutorials/tracks.html
The layout based on TableLayout maybe could be improved.
Some performances tests are needed in order to optimize the performances of GPS FIX and TRACK layouts.
In order to speedup the exportation process, should be fine to split the 3 macro tasks of the exporter into 3 separated threads.
Thread 1 = Performs DB queries and populates the lists (a BlockingQueue) of Location items;
Thread 2 = Reads Location items from the list, builds strings for output file(s) and puts them into one list for each file format;
Thread 3 = Reads strings from the string list(s) and write file(s);
I tried to split DB queries from the rest of exportation process a couple of months ago, and I found a noticeable performance improvement. The downside was the memory usage: the exportation was more memory hungry.
java.lang.ArrayIndexOutOfBoundsException:
at eu.basicairdata.graziano.gpslogger.EGM96.getEGMCorrection (EGM96.java:118)
at eu.basicairdata.graziano.gpslogger.LocationExtended. (LocationExtended.java:39)
at eu.basicairdata.graziano.gpslogger.GPSApplication.onLocationChanged (GPSApplication.java:732)
at android.location.LocationManager$ListenerTransport._handleMessage (LocationManager.java:281)
at android.location.LocationManager$ListenerTransport.access$000 (LocationManager.java:210)
at android.location.LocationManager$ListenerTransport$1.handleMessage (LocationManager.java:226)
at android.os.Handler.dispatchMessage (Handler.java:111)
at android.os.Looper.loop (Looper.java:194)
at android.app.ActivityThread.main (ActivityThread.java:5637)
at java.lang.reflect.Method.invoke (Native Method)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755)
at de.robv.android.xposed.XposedBridge.main (XposedBridge.java:107)
We use the Crowdin platform to make, manage and maintain the localizations.
Sign up for free and start to translate GPS Logger!
Here in this issue we inform Translators and Proofreaders when we update the strings in Crowdin.
This is also a good place to discuss about source strings and implementation details.
The inclusion of a new Language into GPS Logger will be done in two phases:
Translation - The translation of 100% of the application strings. Anyone can contribute to translate, without any obligation.
Proofreader Research - A proofreader is a reference person that will work (using Crowdin platform) with the developing team in order to optimize and keep the translation updated. We ask proofreaders a modest follow-up effort (few minutes when we update strings file, maximum once every 2-3 months), and a constructive collaboration spirit.
Translations will be integrated into GPS Logger - just before a new release - when they will be 100% completed and handled by one or more proofreaders.
No longer maintained and incomplete localizations will be removed from the app.
The implementation of an unlisted language is welcome!
Just ask, and we will add it.
There is no money behind this open project, only passion, and desire to do something useful.
We have absolutely NO interest to have as many languages as possible. We hope instead of cooperation with people (maybe GPS Logger users) that share our interests and contribute translating and keep updated this software with our same passion.
This is the reason why we will not cooperate with any paid translator or proofreader.
Thanks to translators and proofreaders, GPS Logger now officially includes the following languages:
KML and GPX files must be exported using the International System of Units, to follow their standards.
But for TXT files (csv) we are free to change the units of measurement, on condition of specify them on column labels.
It would be fine to add the possibility to users to export the TXT file using their preferred system of measurement.
Hello, is everyone interested in Bluetooth Low Energy support for this app?
So one can bind an heart beat sensor for example and have all the informations (GPS track and heartbeat) in the same file. It could be exported as .tcx file...
Thank you!
I'll explain this issue presenting a typical scenario:
A user does a track exportation and he opens the exported file with another app that keeps the file busy (like a text editor for example). Then the user switches back to GPS Logger and launch again the exportation of the same track.
In that case the exporter simply will not write the new file, and does it silently.
We need to abort the exportation process, showing a visual feedback (like a toast) that warns the user about the exportation failure.
Some users ask to have the possibility to manage the exporting folder, moving also into the second SD card.
It is necessary to check read/write permissions of the selected folder before switch to the new one.
We must pay attention; different Android versions may have different behavior, so this is not a trivial task.
Some users, in fact, wrote that they need a double pass in order to save exported tracks on your PC via USB.
We must find a good way to do that task before to start implementation.
The feature consists in an addition of a "Smart" mode in available Collecting Densities.
The smart mode would try to recognize when the user is going straight, in order to avoid to record a lot of points of a straight line.
This mode aims to reduce the amount of trackpoints recorded in every track.
There are many good reasons to divide the data string formatting from the numeric data:
The implementation of PhysicalData.java and PhysicalDataFormatter.java is started.
The goal is to add this improvement in the next app update.
Hello @GrazianoCapelli ,
I'm a graphic designer and i'm asking for your permission to design an icon and a logo for your application.
Hello there!
Your app looks interesting, I would sure like to try it! Would it be possible to release it on F-Droid? It will be very helpful if you can.
Hello,
thank you for this great app without any unnecessary frills!
While browsing through this app (v2.1.7) I think I found a little bug with aviation / nautic measurement system: As unit for distance the nautical mile is implemented. And as units for speed I can choose between kn and mph. But the calculation for mph differes from kn. I think here is a mix of aviation / nautic and imperial system of measurement - for mph the statutory mile is used. In my opinion in aviation / nautics both kn and mph should be the same (based on the nautical mile).
I did not dare to change it because I do not know whether you implemented this intentionally that way.
On the other hand I am not sure if mph is a used unit for speed in aviation / nautics. I think only kn is used.
Kind regards,
Gudrun
java.lang.OutOfMemoryError:
at android.graphics.BitmapFactory.nativeDecodeStream (Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal (BitmapFactory.java:632)
at android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:608)
at android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:380)
at android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:406)
at eu.basicairdata.graziano.gpslogger.GPSApplication$AsyncThumbsLoaderThreadClass.run (GPSApplication.java:1193)
It would be fine to add a full screen visualization mode for some GPS FIX and TRACK fields (like speeds, direction, and so on), with the following behavior:
It will be great to have a sharing option of current active route.
Although the ability exist, it is operative only after a route was ended/saved.
Some users asked to add the possibility to install/move the app into SD instead of the internal memory of the device, depending on user choice.
The installation into real SD should save a small amount of device space (less than 2 MB), because all the app data must still be saved into the device memory (this is an Android restriction).
Moreover, with the app on SD, when the user enables USB mass storage to share files with a computer or unmounts the SD card via the system settings, the external storage is unmounted from the device and all applications running on the external storage are immediately killed (Thus the app will stops working, and the service will be killed).
Here you can find the Google documentation about the App Install Location.
I'm a little skeptic about the implementation of this feature.
For now I open the issue to take track of this need and, of course, to collect other opinions.
A menu item with the explicit "Shutdown" option must be added.
The new menu will close the app the same way as the BACK hardware button does now.
After the introduction of the foreground service many users asked about closing the service and the app: back button is not enough visible and clear.
I cannot minimize app with Home Button. App must be "on top" to register track.
Please consider add "run in background" option.
A new settings in Exporting section in order to choose the track color for KML.
Could be cool to add extra options like "Color based on speed", "Color based on Altitude", and so on.
It is possible to change also the color of the GPX one?
java.lang.NullPointerException:
at android.location.GpsStatus.setStatus (GpsStatus.java:189)
at android.location.GpsStatus.setStatus (GpsStatus.java:209)
at android.location.LocationManager.getGpsStatus (LocationManager.java:2194)
at eu.basicairdata.graziano.gpslogger.GPSApplication.updateSats (GPSApplication.java:625)
at eu.basicairdata.graziano.gpslogger.GPSApplication.onGpsStatusChanged (GPSApplication.java:700)
at android.location.LocationManager$GnssStatusListenerTransport$1.onSatelliteStatusChanged (LocationManager.java:1486)
at android.location.LocationManager$GnssStatusListenerTransport$GnssHandler.handleMessage (LocationManager.java:1434)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6776)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1386)
Normally the GPS set the speed to zero when the speed is very low (to remove the random walking during the still phase), but some GPS hardware doesn't filter well the low speeds.
As result the on-movement statistics are wrong, because the threshold speed between movement and still phase is set to zero.
This threshold must be moved to 1 m/s (it seems a good value, used by other GPX visualizers).
The toast should be something like: "Track exported in /GPSLogger folder".
For historical reasons, the EGM Binary Geoid Height File is saved into /GPSLogger/AppData/.
Would be nice to move it into the FilesDir, that is a private folder and is not normally accessed by the user.
The file will be downloaded in the new folder when the user enables the EGM correction for the first time.
In case the file already exists in /GPSLogger/AppData/, we have to copy it into the new folder.
In that way will be possible in the future to clear and remove the "/AppData" subfolder on Shutdown.
Many users requested the inclusion of this field, in order to be able to synchronize the time of the Camera with the GPS time.
We need a minimum of design phase before start the implementation.
We found that some GPS sensors returns the bearing (with the value "0") when the speed of the fix is zero.
As result, the GPS FIX tab shows the Direction "N" when the user is still.
We can fix this bad behavior using removeBearing() when Speed = 0.
Some users complain that they cannot view speed graph of the track on external GPX viewers.
The reason of this behavior is on the "View" command, that sends a KML file to the viewer.
in fact KML files don't contain some useful information (like speeds).
A GPX file contains speeds, times, satellites and other useful information instead.
An option should be added, in order to set the desired viewer type.
Something like this:
View tracks with:
java.lang.NullPointerException:
at android.location.GpsStatus.setStatus (GpsStatus.java:186)
at android.location.GpsStatus.setStatus (GpsStatus.java:205)
at android.location.LocationManager.getGpsStatus (LocationManager.java:2194)
at eu.basicairdata.graziano.gpslogger.GPSApplication.updateSats (GPSApplication.java:647)
at eu.basicairdata.graziano.gpslogger.GPSApplication.onGpsStatusChanged (GPSApplication.java:721)
at android.location.LocationManager$GnssStatusListenerTransport$1.onSatelliteStatusChanged (LocationManager.java:1486)
at android.location.LocationManager$GnssStatusListenerTransport$GnssHandler.handleMessage (LocationManager.java:1434)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6123)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:757)
Some users asked to implement the system of measurement used in aviation and nautics:
I specify that the new units are only for visualization purpose; GPX and KML files must be exported in the ISU.
It would be nice to add a little online help, hosted on BasicAirData website and accessible even directly from the application.
We could include:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.