Не срабатывает activity.bind(on_activity_result=self.on_activity_result) в приложении на python с использованием kivy
Пишу приложение на python с использованием kivy. Если упрощенно, то надо выбирать из галереи изображение и отображать его на экране. Я пробовала через FileChooser, но это не работало на китайских моделях, потому что в некоторых моделях изменена файловая система и стандартные способы получения пути к галерее не работают. Поэтому я решила делать это через SAF. То есть, я через activity и Intent запускаю выбор изображения и обрабатываю результат выбора. Но проблема в том, что до обработки результата дело не доходит, потому что activity.bind(on_activity_result=self.on_activity_result)
не срабатывает. А если я напрямую делаю сама вот так
ActivityResultListener(self.on_activity_result)
PythonActivity.mActivity.addActivityResultListener(self.listener)
то приложение вылетает на этой строчке.
Разрешения все прописаны в buildozer и запрашиваются в коде приложения. Вот мой код в урезанном виде
from jnius import autoclass
from android.permissions import request_permissions, Permission
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.core.image import Image as CoreImage
from io import BytesIO
from PIL import Image as PILImage
from android import activity
# Android классы
Intent = autoclass('android.content.Intent')
PythonActivity = autoclass('org.kivy.android.PythonActivity')
class GalleryApp(App):
def build(self):
# Запрашиваем разрешения на доступ к хранилищу
request_permissions([Permission.READ_EXTERNAL_STORAGE])
# Основной интерфейс
layout = BoxLayout(orientation='vertical')
btn = Button(text="Выбрать изображение", size_hint=(1, 0.2))
btn.bind(on_press=self.open_gallery)
layout.add_widget(btn)
# Виджет для отображения изображения
self.img = Image()
layout.add_widget(self.img)
# Привязываем событие получения результата выбора изображения
activity.bind(on_activity_result=self.on_activity_result)
return layout
def open_gallery(self, instance):
intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.setType("image/*")
PythonActivity.mActivity.startActivityForResult(intent, 1001)
def on_activity_result(self, request_code, result_code, intent_data):
if request_code == 1001 and result_code == -1: # RESULT_OK
# тут обработка изображения
if __name__ == '__main__':
GalleryApp().run()
вопрос: почему не срабатывает activity.bind(on_activity_result=self.on_activity_result)
вот эта строчка и в обработку изображения программа даже не заходит