Рубрики
Без рубрики

Игрок: Независимый от платформы уровень совместимости

Player-это библиотека с открытым исходным кодом для доступа к функциям, обычно встречающимся на различных платформах через python. Он обеспечивает поддержку Windows, Macosx, Linux, Android и iOS.

Автор оригинала: Kuldeep.

Player – это библиотека с открытым исходным кодом для доступа к функциям, обычно встречающимся на различных платформах через python. Он находится в стадии интенсивной разработки с текущей версией 1.3.0 и обеспечивает поддержку Windows, Macosx, Linux, Android и iOS.

Содержание

  • История игрока
  • Как им пользоваться?
  • Пример с киви
  • Как работает плеер?
  • Внутренняя работа
  • Способствующий.
  • Вывод.

История игрока.

Kivy organization запустила проект player как необходимость получить доступ к различным функциям платформы, поскольку kivy organization предоставляет фреймворк для создания кросс-платформенных приложений и программного обеспечения с использованием python.

Например, для запуска интерфейса телефонного вызова в мобильных устройствах необходимо получить доступ к библиотекам, предоставляемым соответствующей платформой на самом родном языке.

Для android нужно получить android.content.Намерение и android.net.Uri и начните новое действие с intent action Intent.ACTION_CALL и Intent.setData в качестве телефонного номера для вызова вызова.

Для iOS нужно получить UIApplication и NSURL с tel (номер телефона) в качестве object_str для запуска вызова.

Но как сделать то же самое с помощью python? Для решения этой проблемы kivy запустила 3 проекта: PyJnius , PyObjus и Player .

Pyjnius : Модуль Python для доступа к классам Java как к классам Python с помощью JNI.

Pyobjus : Модуль Python для доступа к классам Objective-C как к классам Python с использованием отражения среды выполнения Objective-C.

Player : Независимый от платформы api для использования функций, обычно встречающихся на различных платформах Python, таких как Акселерометр, Вызов, Преобразование текста в речь, Wi-Fi, Барометр и многое другое .

Как использовать плеер?

Использовать плеер очень просто.

Получить показания акселерометра::

>>> from plyer import accelerometer
>>> accelerometer.enable()
>>> accelerometer.acceleration
(-10.048464775085449, 6.825869083404541, 7.7260890007019043)

Получить состояние батареи::

>>> from plyer import battery
>>> battery.status 
{'percentage': 82.0, 'isCharging': False}

Включите вспышку::

>>> from plyer import flash
>>> flash.on()

Я настоятельно рекомендую вам попробовать Kivy Remote Shell , чтобы увидеть, как эти примеры работают на реальном Android-устройстве. Один важный момент, который следует подчеркнуть, заключается в том, что Игрок является независимым от Kivy и может работать как отдельная сущность.

Пример с киви.

Преобразование текста в речь конвертер. Просто скопируйте и вставьте следующий код и убедитесь, что у вас установлен kivy с версией больше 1.8.0.

Создать main.py файл.

import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup

from plyer import tts


class Text2SpeechDemo(BoxLayout):
    def do_read(self):
        try:
            tts.speak(self.ids.notification_text.text)
        except NotImplementedError:
            popup = ErrorPopup()
            popup.open()


class Text2SpeechDemoApp(App):
    def build(self):
        return Text2SpeechDemo()

    def on_pause(self):
        return True


class ErrorPopup(Popup):
    pass

if __name__ == '__main__':
    Text2SpeechDemoApp().run()

Создайте файл text2speechdemo.kv . [имя файла .kv должно быть одинаковым]

:
    BoxLayout:
        orientation: 'vertical'
        padding: 20

        TextInput:
            id: notification_text
            text: 'Put message here'
        
        Button:
            text: 'Read'
            size_hint_y: 0.2
            on_press: root.do_read()

:
    size_hint: .7, .4
    title: "Error"
    
    BoxLayout:
        orientation: 'vertical'
        padding: 10
        spacing: 20

        Label:
            size_hint_y: 0.4
            text: "This feature has not yet been implemented in Plyer."
        Button:
            text: 'Dismiss'
            size_hint_y: 0.4
            on_press: root.dismiss()

Запустите приложение с помощью python main.py на любой из поддерживаемых платформ, перечисленных во введении, и используйте эту потрясающую функцию.

Как работает плеер?

Игрок старается не изобретать велосипед, а призывает внешние библиотеки реализовать api самым простым способом, в зависимости от текущей платформы.

  • На Android ( python-for-android ) используется pyjnius.
  • На iOS ( kivy-ios ) используется pyobjus
  • В Windows/mac/linux используются часто встречающиеся библиотеки и программы.

Давайте рассмотрим реализацию функции вызова для платформы Android. Следует обратить внимание на следующую строку кода из jnius import autoclass , где jnius-это PyJnius, а autoclass-это метод, возвращающий класс Python см.

from jnius import autoclass
from plyer.facades import Call
from plyer.platforms.android import activity

Intent = autoclass('android.content.Intent')
uri = autoclass('android.net.Uri')


class AndroidCall(Call):

   def _makecall(self, **kwargs):
       intent = Intent(Intent.ACTION_CALL)
       tel = kwargs.get('tel')
       intent.setData(uri.parse("tel:{}".format(tel)))
       activity.startActivity(intent)

   def _dialcall(self, **kwargs):
       intent_ = Intent(Intent.ACTION_DIAL)
       activity.startActivity(intent_)


def instance():
   return AndroidCall()

Использование приведенного выше кода для запуска вызовов.

>>> from plyer import call
>>> call.makecall('9997654321')

Внутренняя работа.

Это звучит круто, как плеер распознает платформу и использует только те файлы, которые нужны?

Чтобы понять это, вам нужно погрузиться в кодовую базу плеера, сначала давайте посмотрим на файловую структуру плеера.

- plyer
    - facades
        - __init__.py
        - ... abstract classes of each feature (https://www.python.org/dev/peps/pep-3119/)
        way to abstract classes.
        
    - platforms # Implementations.
        - android/
        - ios/
        - linux/
        - macosx/
        - win/
        - __init__.py
    
    - __init__.py
    - compat.py
    - utils.py
- other files.

Давайте рассмотрим один пример акселерометра и посмотрим, как он работает.

Когда мы делаем из plyer импорт акселерометра , так как это модуль, он идет в __init__.py ( ссылка ) файл, в котором происходит настоящее волшебство.

# __init__.py file.
from plyer import facades
from plyer.utils import Proxy

#: Accelerometer proxy to :class:`plyer.facades.Accelerometer`
accelerometer = Proxy('accelerometer', facades.Accelerometer)

#other features...

Этот файл создает прокси-сервер для каждой функции, доступной в facades/__init__.py

# utils.py file.
class Proxy(object):
    ...
    def __init__(self, name, facade):
       ...
   
    def _ensure_obj(self):
      ...
          name = object.__getattribute__(self, '_name')
          module = 'plyer.platforms.{}.{}'.format(
              platform, name)
          mod = __import__(module, fromlist='.')
          obj = mod.instance()

где platform – объект класса Platform , который отвечает за определение имени платформы [Класс платформы внутренне использует из sys import platform для получения имени платформы.] и name – имя функции(акселерометр). mod – это модуль, а экземпляр-метод, возвращающий класс, определенный в accelerometer.py файл под реализацию каждой платформы.

Путь: Идет к __init__.py ->(‘акселерометр’, фасады.Акселерометр) -> Переходит в прокси-класс – > _ensure_obj вызывается – > объект obj становится объектом класса из plyer.platforms.android.accelerometer -> готов к импорту.

Способствующий

Игрок проекта открыт для посещения вклада https://github.com/kivy/plyer#contributing для получения дополнительной информации.

Вывод

Спасибо, что прочитали этот пост — надеюсь, вы нашли его полезным. Вы можете найти меня на GitHub , LinkedIn и CodeMentor . Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне! Больше сообщений:

  • Настройка навигационного ящика в Kivy & Kivy MD
  • Игрок: Независимый от платформы уровень совместимости
  • Управление текстурами в Киви с помощью atlas
  • Учебник для начинающих Kivy: Базовый ускоренный курс для приложений в Kivy
  • Redux, Store, Actions, Reducers и logger: Начало работы и немного дальше (1)
  • Redux, Reactotron, Actions, Reducers и Sagas (2)