#python #python-3.x #kivy #kivy-language #buildozer
Вопрос:
Я хочу опубликовать свое приложение kivy для мобильных устройств, но, когда я его тестировал, я понял проблему.
В методе сборки моего приложения я запрашиваю три разрешения:
- READ_EXTERNAL_STORAGE
- WRITE_EXTERNAL_STORAGE
- интернет
В своем приложении я сканирую каталог загрузок пользователя по умолчанию (с помощью plyer), чтобы извлечь аудиофайлы, доступные на устройстве пользователя. Когда я развернул его на Android, я получил всплывающее окно с запросом разрешения, но прежде чем я смог нажать «Принять«, моя программа уже начала поиск, и в результате программа вышла из строя.
Как я могу сказать своему приложению, чтобы оно НЕ продолжало, если пользователь не предоставил разрешение?
Простой обзор моего приложения:
import os from plyer import storagepath from kivy.lang import Builder from kivy.utils import platform from kivymd.app import MDApp class MainApp(MDApp): def __init__(self, **kwargs): super(MainApp, self).__init__(**kwargs) self.kv = Builder.load_string(''' #:kivy 2.0.0 # The rest of my program... ''') def build(self): if platform == "android": from android.permissions import request_permissions, Permission # I do not want my program to proceed if it doesn't have the requested permissions # mostly, read and write permissions request_permissions([ Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE, Permission.INTERNET ]) return self.kv def on_start(self): # I start the search here. for file in os.listdir(storagepath.get_downloads_dir()): if file.endswith("mp3"): pass # ... if __name__ == '__main__': MainApp().run()
Комментарии:
1. Как насчет того , чтобы вместо запроса разрешений внутри
build
вашего методаApp
, вы можете запросить разрешения перед определениемMainApp
класса?