Использование модулей android и pyjnius, для вызова java методов и нативных функций андроида
Приветствую вас дорогие любители и знатоки 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! Как вы увидели ничего в это сложного нет. Ну а пока, всем хорошего дня, до свидания.