Как стать автором
Обновить

Использование модулей android и pyjnius, для вызова java методов и нативных функций андроида

Python *Разработка мобильных приложений *
Ожидает приглашения

Приветствую вас дорогие любители и знатоки kivy. Сегодня мы научимся вызывать методы java, и взаимодействовать с нативными функциями андроида с помощью python. Противники kivy и вообще разработки приложений на python говорят: "В kivy никак нельзя взаимодействовать с функциями android!". Я не знаю как и когда развился этот миф, но сегодня мы его точно уничтожим! Сейчас мы рассмотрим некоторые примеры взаимодействия с андроидом, от простого к сложному.

Пример 1: Получение разрешений на выполнения определённых действий в системе

Пример такого запроса
Пример такого запроса

Запрос таких разрешений очень полезная вещь, ведь без них функционал приложения может не работать. К примеру если в вашем приложении встроена камера, и вы не запросите разрешения на съёмку, то камера работать не будет, а приложение(если вы не обработали ошибку) будет вылетать. Для запроса таких разрешений нам потребуется модуль android.

В коде файла вашего приложения в метод build нужно добавить код:

from android.permissions import request_permissions, Permission
request_permissions([Permission.WRITE_EXTERNAL_STORAGE])

Мы запросили разрешение на запись в локальное хранилище. Для того чтобы запросить другое разрешение, просто поменяйте WRITE_EXTERNAL_STORAGE, на название вашего разрешения, к примеру CAMERA или INTERNET. Также в файле buildozer.spec при компиляции в apk, строку Permissions, нужно раскоментировать и добавить ваше разрешение. Как много разрешений было в этом абзаце)

Внимание! Модуль android нельзя установить на Windows, Linux. или MacOS. Он работает только на андроиде и устанавливается при сборке apk!

Пример 2: Получение доступа к локальному хранилищу

Доступ к локальному хранилищу нужен для чтения, записи и хранения файлов в нём. Без локального хранилища мы не сможем сделать фото с камеры и записать его, а затем продолжить с ним работу. Вот как получается этот доступ:

from android.storage import primary_external_storage_path
global primary_ext_storage
primary_ext_storage = primary_external_storage_path()

Данный код поместите в метод build. И используйте переменную primary_ext_storage.

Пример 3: Получение языка установленного в системе

Данная функция очень полезна, для локализации приложения. Код:

from jnius import autoclass
global lang
lang = autoclass("Local").getDefault().getDisplayLanguage()

Сейчас мы вызвали методы java класса с питоном! Плюс новое знание в копилку!

Данный код как обычно помещаем в метод build. И если язык на устройстве будет русский, то переменная lang будет равна ru, а если английский, то она будет равна en.

Пример 4: Получение доступа к нативной галерее

Вот тут всё просто сделать не получится. Нам придётся использовать отдельно написанный java файл, так как в статью весь код не поместить вот ссылка на github: https://github.com/Android-for-Python/Storage-Example

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

Заключение

Сегодня мы научились вызывать java методы и пользоваться нативными функциями андроида с помощью python! Как вы увидели ничего в это сложного нет. Ну а пока, всем хорошего дня, до свидания.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.