Не продолжайте, если запрошенные разрешения не предоставлены

#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 класса?