Outils pour utilisateurs

Outils du site


kivy_plyer

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
kivy_plyer [2020/01/02 14:48]
serge créée
kivy_plyer [2020/12/01 18:43]
serge ↷ Liens modifiés en raison d'un déplacement.
Ligne 1: Ligne 1:
 ====== Kivy: plyer====== ====== Kivy: plyer======
- 
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
 **{{tagpage>kivy|Toutes les pages Kivy}}** **{{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]]** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_plyer|English Version]]**
 +</WRAP>
 +<WRAP center round box 40% centeralign>
 +**[[les_pages_kivy_en_details|Les pages Kivy en détails]]**
 </WRAP> </WRAP>
  
 +**Plyer** fournit des façades pour accéder facilement à des fonctionnalités Android. C'est une alternative simple à **[[kivy_jnius|jnuis]]**
 =====Installation===== =====Installation=====
- 
   sudo pip3 install plyer   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é:
 +
 +<code python main.py>
 +#! /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()
 +</code>
 +
 +<code python accelerometertest.kv>
 +#:kivy 1.8.0
 +<AccelerometerTest>:
 +    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()
 +</code>
 +
 +===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=====
 +<code python main.py>
 +#! /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()
 +</code>
 +
 +<code python sms.kv>
 +<SmsInterface>:
 +    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()
 +</code>
 +
 +<code python buildozer.spec>
 +[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
 +</code>
 +===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===
 +<code>
 +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.
 +</code>
  
-=====Utilisation=====+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 sb}}+{{tag> kivy python sb }}
kivy_plyer.txt · Dernière modification: 2020/12/01 18:43 de serge