Как повесить событие на тряску телефона используя Python?
Делаю приложение на Kivy, тут у меня возник вопрос. Можно ли как то повесить событие на тряску телефона? Т.е выполнить какую-нибудь функцию при тряске телефона пользователем. На чем можно такое реализовать используя python?
Ответы (2 шт):
Это супер сложно, но реализуемо:
Добавьте в файл buildozer.spec строку с java зависимостями rxjava и rxandroid:
android.gradle_dependencies =
дальше нужно изменить build.gradle таким образом:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Потом берём код из этой статьи: https://habr.com/ru/company/badoo/blog/304488/
Чуть-чуть корректируем и вставляем в отдельный файл.
Далее опять меняем buildozer.spec и добавляем наш файл java файл:
android.add_jars = java.jar
Потом используя библиотеку pyjnius
Мы вызываем методы этого файла и ловим ивент тряски.
Если у вас получится это сделать выложите репо на гитхаб.
С библиотекой plyer это реализовать довольно легко. Kivy Plyer
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from plyer import gyroscope, vibrator
from kivy.clock import Clock
class MyBox(BoxLayout):
def __init__(self, **kwargs):
super().__init__(orientation="vertical", padding=10, spacing=10, **kwargs)
self.label = Label(text = '0', font_size = '30sp')
self.add_widget(self.label)
gyroscope.enable()
Clock.schedule_interval(self.run_acceleration, 0.1)
def run_acceleration(self, *args):
print(gyroscope.rotation)
try:
if (gyroscope.rotation[0] >0.5 or
gyroscope.rotation[0] < -0.5 or
gyroscope.rotation[1] > 0.5 or
gyroscope.rotation[1] < -0.5 or
gyroscope.rotation[2] > 0.5 or
gyroscope.rotation[2] < -0.5):
iter = int(self.label.text)
self.label.text = str(iter + 1)
vibrator.vibrate(0.05)
except:
pass
class MyApp(App):
def build(self):
return MyBox()
app = MyApp()
app.run()