====== Kivy: plyer====== **{{tagpage>kivy|Toutes les pages Kivy}}** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_plyer|English Version]]** **[[les_pages_kivy_en_details|Les pages Kivy en détails]]** **Plyer** fournit des façades pour accéder facilement à des fonctionnalités Android. C'est une alternative simple à **[[kivy_jnius|jnuis]]** =====Installation===== sudo pip3 install plyer =====Ressources===== Très pauvres ! * **[[https://kivy.org/doc/stable/guide/android.html#plyer|Plyer]]** * **[[https://github.com/kivy/plyer|plyer sur github.com ]]** Le Readme donne les fonctions possible en fonction des plateformes * **[[https://github.com/kivy/plyer/tree/master/examples|Les exemples sur gituhub]]**, mais c'est pour du python2, et c'est mal codé ! =====Possiblité d'accès===== ===Android=== Accelerometer Audio recording Barometer Battery Bluetooth Brightness Call Camera (taking picture) Compass Email (open mail client) Flash GPS Gravity Gyroscope Humidity IR Blaster Light Native file chooser Notifications Orientation Proximity SMS (send messages) Spatial Orientation Speech to text Storage Path Temperature Text to speech Unique ID Vibrator ===Linux=== Accelerometer Battery Brightness CPU count Email (open mail client) Native file chooser Notifications Screenshot Storage Path Text to speech Unique ID Wifi =====Exemple===== Vous voulez quelque chose, faîtes le vous même ! L'exemple **[[https://github.com/kivy/plyer/tree/master/examples/accelerometer/basic|Accelerometer Test]]** pour python3 et corrigé: #! /usr/bin/env python3 # -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.clock import Clock from plyer import accelerometer class AccelerometerTest(BoxLayout): def __init__(self): super().__init__() self.sensorEnabled = False def do_toggle(self): if not self.sensorEnabled: try: accelerometer.enable() print(accelerometer.acceleration) self.sensorEnabled = True self.ids.toggle_button.text = "Stop Accelerometer" except: print("Accelerometer is not implemented for your platform") if self.sensorEnabled: Clock.schedule_interval(self.get_acceleration, 1 / 20) else: accelerometer.disable() status = "Accelerometer is not implemented for your platform" self.ids.toggle_button.text = status else: # Stop de la capture accelerometer.disable() Clock.unschedule(self.get_acceleration) # Retour à l'état arrété self.sensorEnabled = False self.ids.toggle_button.text = "Start Accelerometer" def get_acceleration(self, dt): if self.sensorEnabled: val = accelerometer.acceleration[:3] if not val == (None, None, None): self.ids.x_label.text = "X: " + str(val[0]) self.ids.y_label.text = "Y: " + str(val[1]) self.ids.z_label.text = "Z: " + str(val[2]) class AccelerometerTestApp(App): def build(self): return AccelerometerTest() def on_pause(self): return True if __name__ == '__main__': AccelerometerTestApp().run() #:kivy 1.8.0 : BoxLayout: orientation: 'vertical' Label: id: x_label text: 'X: ' Label: id: y_label text: 'Y: ' Label: id: z_label text: 'Z: ' Label: id: accel_status text: '' BoxLayout: size_hint_y: None height: '48dp' padding: '4dp' ToggleButton: id: toggle_button text: 'Start accelerometer' on_press: root.do_toggle() ===Le *apk=== * {{media_08:accelbasicexample-1.1.apk|accelbasicexample-1.1.apk}} =====android.permissions===== * [[https://developer.android.com/reference/android/Manifest.permission.html|Liste de toutes les permissions]] Les permissions définies dans buildozer.spec crée le bouton enable/disable dans Android / Paramètres / Application pour certaine permission: par défaut, il est disable. Quand ça ne marche pas, c'est la première chose à regarder. =====Exemple Envoi de Sms===== #! /usr/bin/env python3 # -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.properties import StringProperty from plyer import sms class SmsInterface(BoxLayout): pass class IntentButton(Button): sms_recipient = StringProperty() sms_message = StringProperty() def send_sms(self, *args): sms.send(recipient=self.sms_recipient, message=self.sms_message) class SmsApp(App): def build(self): return SmsInterface() def on_pause(self): return True if __name__ == "__main__": SmsApp().run() : orientation: 'vertical' BoxLayout: size_hint_y: None height: sp(30) Label: text: 'Recipient:' TextInput: id: recipient multiline: False on_text_validate: message.focus = True BoxLayout: Label: text: 'Message:' TextInput: id: message IntentButton: sms_recipient: recipient.text sms_message: message.text text: 'Send SMS' size_hint_y: None height: sp(40) on_release: self.send_sms() [app] title = Sms package.name = sms package.domain = org.test source.dir = . source.include_exts = py,png,jpg,kv,atlas version = 0.3 requirements = python3,kivy,plyer orientation = portrait fullscreen = 0 android.arch = armeabi-v7a android.permissions = READ_PHONE_STATE, SEND_SMS, RECEIVE_SMS, READ_SMS [buildozer] log_level = 2 warn_on_root = 1 ===Le *.apk=== * {{ media_12:sms_armeabi-v7a-0.3-armeabi-v7a-debug.apk |sms_armeabi-v7a-0.3-armeabi-v7a-debug.apk}} ===La permission SEND_SMS n'est pas acceptée par Android=== 01-04 09:55:02.207 3635 3654 I python : jnius.jnius.JavaException: JVM exception occurred: Sending SMS message: uid 10074 does not have android.permission.SEND_SMS. Les permissions définies dans buildozer.spec crée le bouton enable/disable dans Android / Paramètres / Application pour cette permission: par défaut, il est disable. Quand ça ne marche pas, c'est la première chose à regarder. {{tag> kivy python sb }}