====== 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 }}