Kivyアプリケーションを用いたAndroidアプリケーションにおいて、内部ストレージに書き込みができない。

実現したいこと

現在Kivy2.1.0、Python3.9.9で日記のアプリケーションを作成しています。
コーディング後Buildozer 1.5.1.dev0でパッケージング化し、アプリケーションが正常に動作することを確認しました。

さらなる改良として、日記の内容をsaveしていくsqlite3の.dbファイルを、操作しやすいようにAndroidの内部ストレージの/storage/emulated/0/Android/data/以下に作ったフォルダに保存したいと考えています。

AndroidのPermissionを取得して、/storage/emulated/0/以下のフォルダを参照できるようにはなったのですが、/storage/emulated/0/Android/data/以下にフォルダを作ろうとするところでエラーが起こります。

さらにほかのPermissionが必要なのでしょうか。

発生している問題・エラーメッセージ

作製したapkファイルをAndroidにインストールした後、adb logcat -s Pythonで取得したLog

04-14 16:20:08.023 30072 30108 I python : Traceback (most recent call last): 04-14 16:20:08.023 30072 30108 I python : File "/home/agjpupjga/kivy/yumenikki/.buildozer/android/app/main.py", line 31, in <module> 04-14 16:20:08.023 30072 30108 I python : PermissionError: [Errno 13] Permission denied: '/storage/emulated/0/Android/data/jp.ulthar.yumenikki/' 04-14 16:20:08.023 30072 30108 I python : Python for android ended.

該当のソースコード

Python

1from datetime import datetime 2from dateutil.relativedelta import relativedelta 3import sqlite3 4import os 5from kivy.lang import Builder 6from kivymd.app import MDApp 7from kivymd.uix.boxlayout import MDBoxLayout 8from kivymd.uix.button import MDRectangleFlatButton,MDRaisedButton 9from kivymd.uix.label import MDLabel 10from kivymd.uix.dialog import MDDialog 11from kivymd.uix.list import OneLineRightIconListItem 12from kivy.utils import platform 13 14from kivy.core.window import Window 15 16from kivy.core.text import LabelBase, DEFAULT_FONT 17from kivy.resources import resource_add_path 18resource_add_path("./fonts")19LabelBase.register(DEFAULT_FONT, "mplus-2c-regular.ttf")20 21 22if platform == "android":23 from android.permissions import request_permissions,Permission 24 request_permissions([Permission.WRITE_EXTERNAL_STORAGE,Permission.READ_EXTERNAL_STORAGE])25 from android.storage import primary_external_storage_path 26 import os 27 primary_ex_path=primary_external_storage_path()28 29if os.path.exists(primary_ex_path+"/Android/data/jp.ulthar.yumenikki/")==False:30 os.mkdir(primary_ex_path+"/Android/data/jp.ulthar.yumenikki/")31conn=sqlite3.connect(primary_ex_path+"/Android/data/jp.ulthar.yumenikki/"+"yumenikki.db")32cur=conn.cursor()33cur.execute("SELECT * FROM sqlite_master WHERE type='table' and name = 'yume'")34if not cur.fetchone():35 cur.execute("Create table yume (id integer primary key autoincrement, date, yume)")36===文字数制限のため省略===37class DiaryApp(MDApp):38 today=datetime.today().date()39 def build(self):40 self.t_year=str(self.today).split("-")[0]41 self.t_month=str(self.today).split("-")[1]42 self.t_date=str(self.today).split("-")[2]43 Builder.load_string(KV)44 return MainDiary()45 46#Window.size=(480,800)47if __name__ == '__main__':48 DiaryApp().run()

変更点のみ

buildozer

1[app] 2 3# (str) Title of your application 4title = yumenikki 5 6# (str) Package name 7package.name = yumenikki 8 9# (str) Package domain (needed for android/ios packaging) 10package.domain = jp.ulthar 11 12# (list) Source files to include (let empty to include all the files) 13source.include_exts = py,png,jpg,kv,atlas,db,ttf 14 15 16# (list) Application requirements 17# comma separated e.g. requirements = sqlite3,kivy 18requirements = python3,kivy==2.1.0,kivymd==1.0.2,sqlite3,android,dateutil,plyer,Pillow 19 20 21 22 23# Kivy version to use 24osx.kivy_version = 2.1.0 25 26 27 28# (list) Permissions 29# (See https://python-for-android.readthedocs.io/en/latest/buildoptions/#build-options-1 for all the supported syntaxes and properties) 30android.permissions = android.permission.INTERNET, (name=android.permission.WRITE_EXTERNAL_STORAGE;maxSdkVersion=18) 31 32 33# (int) Target Android API, should be as high as possible. 34android.api = 33 35

とりあえず現状公開などは考えておらず、自前のAndroid13の端末で機能すればよいと考えています。
よろしくお願いします。

コメントを投稿

0 コメント