From 1d04daef0f23e63bdedbc4d81433d5e7892db4bc Mon Sep 17 00:00:00 2001 From: rgarcia-herrera Date: Thu, 16 Jul 2020 21:12:36 -0500 Subject: [PATCH] cannibalize plyer gps example --- buildozer.spec | 6 ++--- flockompass.kv | 23 +++++------------ main.py | 68 ++++++++++++++++++++++++++----------------------- needle.png | Bin 4502 -> 3479 bytes 4 files changed, 45 insertions(+), 52 deletions(-) diff --git a/buildozer.spec b/buildozer.spec index ab70d40..353626e 100644 --- a/buildozer.spec +++ b/buildozer.spec @@ -1,7 +1,7 @@ [app] # (str) Title of your application -title = Flockompass +title = flockompass # (str) Package name package.name = flockompass @@ -36,7 +36,7 @@ version = 0.1 # (list) Application requirements # comma separated e.g. requirements = sqlite3,kivy -requirements = python3,kivy,hostpython3,mapview,plyer,requests,urllib3,chardet,idna +requirements = hostpython3, python3, kivy, plyer, android, mapview, requests, urllib3, chardet, idna # (str) Custom source folders for requirements # Sets custom source for any requirements with recipes @@ -85,7 +85,7 @@ fullscreen = 0 #android.presplash_color = #FFFFFF # (list) Permissions -#android.permissions = INTERNET +android.permissions = INTERNET,ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION # (int) Target Android API, should be as high as possible. #android.api = 27 diff --git a/flockompass.kv b/flockompass.kv index f1bc9b2..9b5eb9e 100644 --- a/flockompass.kv +++ b/flockompass.kv @@ -62,24 +62,12 @@ root.disable() disable_button.disabled = not disable_button.disabled enable_button.disabled = not enable_button.disabled - BoxLayout: - orientation: 'vertical' - Label: - text: "Earth's Magnetic Field" - Label: - text: 'including hard iron calibration' - Label: - text: '(' + str(root.x_calib) + ',' - Label: - text: str(root.y_calib) + ',' - Label: - text: str(root.z_calib) + ')' Label: - text: app.gps_location + text: root.gps_location Label: - text: app.gps_status + text: root.gps_status BoxLayout: size_hint_y: None @@ -89,10 +77,11 @@ ToggleButton: text: 'Start' if self.state == 'normal' else 'Stop' on_state: - app.start(1000, 0) if self.state == 'down' else \ - app.stop() - + root.start(1000, 0) if self.state == 'down' else \ + root.stop() + + FloatLayout: canvas: diff --git a/main.py b/main.py index 2b3e3dc..8908295 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,14 @@ +from plyer import gps from kivy.app import App from kivy.clock import Clock -from kivy.uix.screenmanager import ScreenManager, Screen, RiseInTransition from kivy.properties import NumericProperty, StringProperty -from kivy.lang import Builder -from kivy_garden.mapview import MapView -from plyer import gps from kivy.clock import mainthread from kivy.utils import platform + +from kivy.uix.screenmanager import ScreenManager, Screen, RiseInTransition + +from kivy_garden.mapview import MapView + from kivy.vector import Vector from kivy.animation import Animation from math import floor @@ -23,12 +25,13 @@ class CompassScreen(Screen): y_calib = NumericProperty(0) z_calib = NumericProperty(0) - needle_angle = NumericProperty(0) + needle_angle = NumericProperty(0) + gps_location = StringProperty() + gps_status = StringProperty('Click Start to get GPS location updates') def enable(self): self.facade.enable() Clock.schedule_interval(self.get_field, 1 / 20.) - gps.start(1000, 0) def disable(self): self.facade.disable() @@ -57,25 +60,6 @@ class CompassScreen(Screen): self._anim.start(self) - -class FlockompassApp(App): - - gps_location = StringProperty() - gps_status = StringProperty('Click Start to get GPS location updates') - - def request_android_permissions(self): - from android.permissions import request_permissions, Permission - - def callback(permissions, results): - if all([res for res in results]): - print("callback. All permissions granted.") - else: - print("callback. Some permissions refused.") - - request_permissions([Permission.ACCESS_COARSE_LOCATION, - Permission.ACCESS_FINE_LOCATION], - callback) - def start(self, minTime, minDistance): gps.start(minTime, minDistance) @@ -89,22 +73,46 @@ class FlockompassApp(App): def on_resume(self): gps.start(1000, 0) - @mainthread def on_location(self, **kwargs): + print('aguas on location') + print(kwargs) self.gps_location = '\n'.join([ '{}={}'.format(k, v) for k, v in kwargs.items()]) @mainthread def on_status(self, stype, status): + print('aguas on status') self.gps_status = 'type={}\n{}'.format(stype, status) + + +class FlockompassApp(App): + + def request_android_permissions(self): + from android.permissions import request_permissions, Permission + + def callback(permissions, results): + if all([res for res in results]): + print("aguas: callback. All permissions granted.") + else: + print("aguas: callback. Some permissions refused.Permission.ACCESS_FINE_LOCATION") + + request_permissions([Permission.ACCESS_COARSE_LOCATION, + Permission.ACCESS_FINE_LOCATION], + callback) + def build(self): + root = ScreenManager(transition=RiseInTransition()) + root.add_widget(MapScreen(name='map')) + cs = CompassScreen(name='compass') + cs._anim = None + try: - gps.configure(on_location=self.on_location, - on_status=self.on_status) + gps.configure(on_location=cs.on_location, + on_status=cs.on_status) except NotImplementedError: import traceback traceback.print_exc() @@ -114,10 +122,6 @@ class FlockompassApp(App): print("gps.py: Android detected. Requesting permissions") self.request_android_permissions() - root = ScreenManager(transition=RiseInTransition()) - root.add_widget(MapScreen(name='map')) - cs = CompassScreen(name='compass') - cs._anim = None root.add_widget(cs) return root diff --git a/needle.png b/needle.png index ba74a19a99ded1021451d2fcd1911115cb1c96e1..85a75e5afa485b6ecaaff96ad9d9205830d338c7 100644 GIT binary patch literal 3479 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 literal 4502 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