{"id":167,"date":"2022-05-18T17:00:00","date_gmt":"2022-05-18T17:00:00","guid":{"rendered":"https:\/\/blogs.oregonstate.edu\/davidkaff\/?p=167"},"modified":"2022-05-19T09:52:32","modified_gmt":"2022-05-19T09:52:32","slug":"telemetry-test-of-flutter-app","status":"publish","type":"post","link":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/","title":{"rendered":"Testing the Location Telemetry of a (Flutter) Mobile App"},"content":{"rendered":"\n<p>This is a report on a comparative field test I planned and performed, which tested the &#8220;Location Telemetry&#8221; of my Senior Software Engineering Capstone team&#8217;s Flutter App.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\" alt=\"\" class=\"wp-image-184\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Route walked for test in Balboa Park<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Motivation<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>For the last 8 months I have been collaborating on the development of a cross-platform evacuation drill app. This app instructs and guides participants through an evacuation drill. It also records and eventually uploads the <strong>location<\/strong> and <strong>survey datasets<\/strong> that are generated by participants. These datasets go on to support Evacuation Traffic research.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Our app is replacing a previous workflow for drill participants which included:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Answering &#8220;roundtable&#8221; discussion questions verbally<\/li><li>Following written instructions during the drill<\/li><li>Using an exercise tracking app to record and export a location dataset<\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>My team had previously tested and ensured that the app could administer surveys individually and record the results. We had also tested and ensured that the app could deliver novel instructions as prepared by the drill coordinators. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>However, we had not yet tested the app&#8217;s ability to generate and upload <strong>location<\/strong> datasets (also known as<em> trajectory<\/em> datasets: <em>location<\/em> + <em>time<\/em>). In order to test this functionality of the app I planned and carried out a field test. To determine the efficacy of our app in comparison with the previous workflow, I planned the field test as a comparison with the previously used exercise tracking app.<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Tools<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>I currently have three operational smartphones; <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>an iPhone 11<\/li><li>an iPhone SE (1st gen)<\/li><li>a moto g(7)<\/li><\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>I used all three devices in the test. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To load our app onto the devices I used USB links to my development machine and installed the app using the <code style=\"color:#D73F09\">flutter run<\/code> command. <\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To load the exercise tracking app onto the devices I visited the relevant App Store pages and installed the app.<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Procedure<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>There were several concerns which shaped my testing procedure:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>I needed to compare the results I generated against each other.<br><ul><li>To generate a collection of datasets which could be meaningfully compared, I would need to track my location while repeatedly walking an identical route.<br><\/li><\/ul><\/li><li>A known issue was causing early test results to show the output from the moto g(7) as approximately 60 ft below what should have been recorded.<br><ul><li>To determine the exact offset I would need to gather results from a route which had varied elevation to produce signal despite potential low-level noise.<br><\/li><\/ul><\/li><li>The was danger of a device battery running out of charge part-way through the test.<br><ul><li>I needed to mitigate the possibility of gathering much more data with one app versus the other. So each lap I would need to alternate which app I was testing.<\/li><\/ul><\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>These concerns informed my search for a test location. My priorities for the test location were for it to be:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>near public transit for ease of access<\/li><li>a ~0.5km loop that I could walk repeatedly in a reasonable amount of time<\/li><li>a minimum 10 meters of elevation change (which would create datasets that I could determine the Android elevation offset from)<\/li><\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>I eventually settled on this route in Balboa Park (I currently live in San Diego, CA):<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\" alt=\"\" class=\"wp-image-184\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Route walked for test in Balboa Park<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To comparatively test both apps, I planned to walk the route 10 total times: 5 times running each app, exporting the results after each complete lap.<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Results<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In the end, I generated the following quantity of location datasets:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th class=\"has-text-align-right\" data-align=\"right\">Device<\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Exercise Tracking App<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Evac. Drill App<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-right\" data-align=\"right\">iPhone 11<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">iPhone SE<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><\/tr><tr><td class=\"has-text-align-right\" data-align=\"right\">moto g(7)<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><\/tr><\/tbody><\/table><figcaption>Number of datasets generated, by device and app.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Upon returning to my development machine I compiled the results from both apps and began to visually inspect the GPS data. I generated several comparative displays, the most interesting of which I have included below.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-1024x640.png\" alt=\"\" class=\"wp-image-170\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byApp-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>There is clearly something awry with our telemetry!<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-1024x640.png\" alt=\"\" class=\"wp-image-171\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_11-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>These results look ok, but there is a small error in our app&#8217;s data. I only gathered one dataset for each app, as this phone was my bus pass home and the battery was nearly dead!<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-1024x640.png\" alt=\"\" class=\"wp-image-172\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_SE.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Here we see clear errors in our app&#8217;s data.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-1024x640.png\" alt=\"\" class=\"wp-image-173\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_g7.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Wow, here we can see our app&#8217;s data is really wacky. But the exercise app&#8217;s data is a bit wonky as well\u2026<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>I then extracted the elevation data and created elevation vs. time plots for each device:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-1024x640.png\" alt=\"\" class=\"wp-image-174\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_11.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Our data is less smooth, but generally looks ok\u2026<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-1024x640.png\" alt=\"\" class=\"wp-image-175\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_SE.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>A false-start trial is evident in this view (in green)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1024x640.png\" alt=\"\" class=\"wp-image-176\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>The level of noise in this data was completely unexpected, but it was replicated in later trials.<\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>These results led to the following conclusions:<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ol class=\"wp-block-list\" style=\"font-size:32px\"><li>Our app needs an \u201cAcquiring GPS Signal\u201d feature to filter out initial noise.<\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-1024x640.png\" alt=\"\" class=\"wp-image-177\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/SEbadData.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>This is a feature which the exercise tracking app employs, and is evidently the reason for the erroneous GPS data at the start of the iPhone SE datasets. Such a feature will need to begin the streaming of location data, and determine when the signal is settled by using a decaying timer which resets upon any data point that is significantly different from the previous data point.<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\" style=\"font-size:32px\"><li>Noise in GPS data varied more by device than by app.<\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-1024x640.png\" alt=\"\" class=\"wp-image-180\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/GPSdataComparisons_byDevice-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>While the trajectory smoothing algorithms do set the exercise app results apart, this difference is smaller than the difference between results from different devices. This is significant because it means that the data our app generates is worth using for the intended application of Civil Engineering Evacuation Traffic research.<\/p>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\" style=\"font-size:32px\"><li>Researchers may need to post-process calculation elevation data from GPS data if device altimeter outputs poor quality data.<\/li><\/ol>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-1024x640.png\" alt=\"\" class=\"wp-image-181\" srcset=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-1024x640.png 1024w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-300x188.png 300w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-768x480.png 768w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-1536x960.png 1536w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1-1568x980.png 1568w, https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/elevVsTime_g7-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The exercise app <a href=\"https:\/\/support.strava.com\/hc\/en-us\/articles\/216919447-Elevation-for-Your-Activity\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">calculates elevation data from GPS data if device lacks barometric altimeter<\/a>. Researchers using our evacuation drill app can perform the same calculation in post-processing of datasets. However, this will take time and monetary resources. Future development teams may choose to implement an automatic post-processing feature to mitigate the time spent performing these corrections.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-dots\" \/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Upon being presented with these test results our Project Partners deemed our evacuation drill app&#8217;s Location Telemetry performance to be adequate for their research needs.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Subsequent testing will need to be performed when the recommended features are added, and on a regular basis as app development continues to ensure that unrelated features do not corrupt this functionality.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-dots\" \/>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>This is a report on a comparative field test I planned and performed, which tested the &#8220;Location Telemetry&#8221; of my Senior Software Engineering Capstone team&#8217;s Flutter App. Motivation For the last 8 months I have been collaborating on the development of a cross-platform evacuation drill app. This app instructs and guides participants through an evacuation&hellip; <a class=\"more-link\" href=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\">Continue reading <span class=\"screen-reader-text\">Testing the Location Telemetry of a (Flutter) Mobile App<\/span><\/a><\/p>\n","protected":false},"author":11555,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[5],"class_list":["post-167","post","type-post","status-publish","format-standard","hentry","category-oregon-state-capstone-blog","tag-evacuation-drill-app","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff\" \/>\n<meta property=\"og:description\" content=\"This is a report on a comparative field test I planned and performed, which tested the &#8220;Location Telemetry&#8221; of my Senior Software Engineering Capstone team&#8217;s Flutter App. Motivation For the last 8 months I have been collaborating on the development of a cross-platform evacuation drill app. This app instructs and guides participants through an evacuation&hellip; Continue reading Testing the Location Telemetry of a (Flutter) Mobile App\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\" \/>\n<meta property=\"og:site_name\" content=\"David Kaff\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-18T17:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-19T09:52:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\" \/>\n<meta name=\"author\" content=\"David Kaff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Kaff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\"},\"author\":{\"name\":\"David Kaff\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353\"},\"headline\":\"Testing the Location Telemetry of a (Flutter) Mobile App\",\"datePublished\":\"2022-05-18T17:00:00+00:00\",\"dateModified\":\"2022-05-19T09:52:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\"},\"wordCount\":1028,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\",\"keywords\":[\"Evacuation-Drill-App\"],\"articleSection\":[\"Oregon State Capstone Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\",\"url\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\",\"name\":\"Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\",\"datePublished\":\"2022-05-18T17:00:00+00:00\",\"dateModified\":\"2022-05-19T09:52:32+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage\",\"url\":\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\",\"contentUrl\":\"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing the Location Telemetry of a (Flutter) Mobile App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website\",\"url\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/\",\"name\":\"David Kaff\",\"description\":\"fledgling software engineer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353\",\"name\":\"David Kaff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"caption\":\"David Kaff\"},\"url\":\"https:\/\/blogs.oregonstate.edu\/davidkaff\/author\/kaffs\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/","og_locale":"en_US","og_type":"article","og_title":"Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff","og_description":"This is a report on a comparative field test I planned and performed, which tested the &#8220;Location Telemetry&#8221; of my Senior Software Engineering Capstone team&#8217;s Flutter App. Motivation For the last 8 months I have been collaborating on the development of a cross-platform evacuation drill app. This app instructs and guides participants through an evacuation&hellip; Continue reading Testing the Location Telemetry of a (Flutter) Mobile App","og_url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/","og_site_name":"David Kaff","article_published_time":"2022-05-18T17:00:00+00:00","article_modified_time":"2022-05-19T09:52:32+00:00","og_image":[{"url":"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png","type":"","width":"","height":""}],"author":"David Kaff","twitter_card":"summary_large_image","twitter_misc":{"Written by":"David Kaff","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#article","isPartOf":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/"},"author":{"name":"David Kaff","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353"},"headline":"Testing the Location Telemetry of a (Flutter) Mobile App","datePublished":"2022-05-18T17:00:00+00:00","dateModified":"2022-05-19T09:52:32+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/"},"wordCount":1028,"commentCount":0,"image":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage"},"thumbnailUrl":"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png","keywords":["Evacuation-Drill-App"],"articleSection":["Oregon State Capstone Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/","url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/","name":"Testing the Location Telemetry of a (Flutter) Mobile App - David Kaff","isPartOf":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage"},"image":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage"},"thumbnailUrl":"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png","datePublished":"2022-05-18T17:00:00+00:00","dateModified":"2022-05-19T09:52:32+00:00","author":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353"},"breadcrumb":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#primaryimage","url":"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png","contentUrl":"https:\/\/osu-wams-blogs-uploads.s3.amazonaws.com\/blogs.dir\/4766\/files\/2022\/05\/BalboaParkRoute-1024x640.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2022\/05\/18\/telemetry-test-of-flutter-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.oregonstate.edu\/davidkaff\/"},{"@type":"ListItem","position":2,"name":"Testing the Location Telemetry of a (Flutter) Mobile App"}]},{"@type":"WebSite","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website","url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/","name":"David Kaff","description":"fledgling software engineer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.oregonstate.edu\/davidkaff\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353","name":"David Kaff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","caption":"David Kaff"},"url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/author\/kaffs\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/users\/11555"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/comments?post=167"}],"version-history":[{"count":14,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/167\/revisions"}],"predecessor-version":[{"id":204,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/167\/revisions\/204"}],"wp:attachment":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/media?parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/categories?post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/tags?post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}