Outils pour utilisateurs

Outils du site


kivy_android_service

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
kivy_android_service [2020/11/02 08:49] – [Exemple d'un développeur kivy] sergekivy_android_service [2020/11/02 12:53] (Version actuelle) – [Kivy: Android Service] serge
Ligne 2: Ligne 2:
 <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%2Fles_pages_kivy_en_details|English Version]]**+**[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_android_service|English Version]]**
 </WRAP> </WRAP>
 <WRAP center round box 40% centeralign> <WRAP center round box 40% centeralign>
Ligne 32: Ligne 32:
  
 =====Kivy Accelerometer Service OSC===== =====Kivy Accelerometer Service OSC=====
 +
 ====Sources sur GitHub==== ====Sources sur GitHub====
   * **[[https://github.com/sergeLabo/accelerometer_service_osc|accelerometer_service_osc]]**   * **[[https://github.com/sergeLabo/accelerometer_service_osc|accelerometer_service_osc]]**
-====*.apk====+===*.apk===
 Dans le dossier bin Dans le dossier bin
  
-====TODO====+===TODO===
 Si il n'y a pas d'accelerometer sur Android, ça va sans doute mal marcher. Si il n'y a pas d'accelerometer sur Android, ça va sans doute mal marcher.
  
 +====Extrait du code pour le service====
 +La communication entre main.py et service.py se fait en OSC, c'est très rapide, il n'y a aucune latence.
 +Il n'est pas possible de lancer service.py avec des arguments, ni  d'accéder aux attributs de AccelerometerService() depuis main.py, d'où l'OSC.
 +
 +Pour l'OSC, voir [[kivy_oscpy|Kivy: oscpy]]
 +
 +=== buildozer.spec ===
 +[[https://github.com/sergeLabo/accelerometer_service_osc/blob/main/buildozer.spec|buildozer.spec]]
 +
 +<code python>
 +[app]
 +title = Accelerometer
 +package.name = accelerometer
 +package.domain = org.kivy
 +source.dir = .
 +source.include_exts = py,png,jpg,kv,atlas
 +requirements = python3,kivy,plyer,numpy,oscpy,jnius
 +android.permissions = INTERNET, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE
 +services = Pong:service.py
 +</code>
 +
 +===main.py===
 +[[https://github.com/sergeLabo/accelerometer_service_osc/blob/main/main.py|main.py]]
 +
 +<code python>
 +from jnius import autoclass
 +"""
 +Dans buildozer.spec
 +package.name = accelerometer
 +package.domain = org.kivy
 +services = Pong:service.py
 +
 +SERVICE_NAME = u'{packagename}.Service{servicename}'.format(
 +    packagename=u'org.kivy.accelerometer',
 +    servicename=u'ServicePong')
 +
 +Structure = package.domain.package.name.ServiceToto
 +package.domain = org.kivy
 +package.name = accelerometer
 +soit
 +org.kivy.accelerometer.ServicePong
 +"""
 +
 +SERVICE_NAME = 'org.kivy.accelerometer.ServicePong'
 +print("SERVICE_NAME:", SERVICE_NAME)
 +
 +.....
 +
 +class AccelerometerApp(App):
 +    
 +    ...
 +    
 +    def start_service(self):
 +        if ANDROID:
 +            self.service = autoclass(SERVICE_NAME)
 +            self.m_activity = autoclass(u'org.kivy.android.PythonActivity').mActivity
 +            argument = ''
 +            self.service.start(self.m_activity, argument)    
 +    
 +    ...
 +    
 +    def do_quit(self):
 +        if ANDROID:
 +            self.service.stop(self.m_activity)
 +            self.service = None
 +        else:
 +            self.client.send_message(b'/stop', [1])
 +            sleep(1)
 +
 +        AccelerometerApp.get_running_app().stop()
 +</code>
 +        
 +===service.py===
 +[[https://github.com/sergeLabo/accelerometer_service_osc/blob/main/service.py|service.py]]
 +
 +<code python>
 +class AccelerometerService:
 +
 +    def __init__(self):
 +
 +        ...
 +        self.init_osc()
 +        self.sensor_init()
 +        
 +    ...
 +    
 +    def init_osc(self):
 +        """Le serveur peut envoyer mais impossible d'avoir 2 serveurs sur le même port
 +        de la même machine, donc il faut un client.
 +        """
 +        self.server = OSCThreadServer()
 +        self.server.listen('localhost', port=3001, default=True)
 +        # Les callbacks du serveur
 +        self.server.bind(b'/activity', self.on_activity)
 +        self.server.bind(b'/stop', self.on_stop)
 +        self.server.bind(b'/sensor_enable', self.on_sensor_enable)
 +        # Un simple client
 +        self.client = OSCClient(b'localhost', 3003)
 +        
 +    ...
 +    
 +    def run(self):
 +        while self.loop:
 +            self.get_acceleration()
 +            sleep(0.02)
 +
 +
 +if __name__ == '__main__':
 +
 +    ACCELEROMETER = AccelerometerService()
 +    ACCELEROMETER.run()
 +</code>
 +
 +
 +=====Un projet plus complet=====
 +
 +  * **[[https://github.com/sergeLabo/roulez_bourrez|Roulez Bourrez]]**
  
 {{tag> kivy python sb }} {{tag> kivy python sb }}
kivy_android_service.1604306964.txt.gz · Dernière modification : 2020/11/02 08:49 de serge