首页 > 解决方案 > Kivi:如何设置存储 Android 应用程序的 Output.txt 文件的路径

问题描述

我正在使用 kivy 和 python 制作 android 应用程序,我有功能可以创建 TXT 格式的记录,在我的项目中它与 .PY 文件位于同一文件夹中,但我知道一旦我创建 .apk 那么它可能是问题所在文件将被存储。例如,我想将该 Tracking.txt 文件存储在 Android 设备的下载文件夹中。请问我该如何定义?

这就是它现在的定义方式,它应该安全/打开应用程序所在的文件。

import kivy
from datetime import datetime
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image
from kivy.core.audio import SoundLoader
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.utils import platform
import os

if platform == 'android':
    import android
    from android.permissions import request_permissions, Permission
    request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
    from android.storage import primary_external_storage_path
    dir = primary_external_storage_path()
    download_dir_path = os.path.join(dir, 'Download')

Window.size = (480, 800)

class MyGrid(GridLayout):
    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)

        self.cols = 1  # Set columns for main layout
        self.inside = GridLayout(cols=2, row_force_default=True,
                                 row_default_height=50, padding=20,
                                 spacing=10)  # Create a new grid layout
        self.add_widget(Label(text="Tracking Number \n Checker", halign="center", font_size=40))  # Top Label
        self.inside.add_widget(Label(text="Work Number:", halign="center", font_size=20))  # Add a label widget
        self.worknumb = TextInput(text_validate_unfocus=True, multiline=False, font_size=20, halign="center")
        self.inside.add_widget(self.worknumb)
        self.inside.add_widget(Label(text="Tracking \nNO. Scan:", halign="center", font_size=20))
        self.tracknumb = TextInput(multiline=False, font_size=15, halign="center")  # Create a Text input box stored in the name variable
        self.inside.add_widget(self.tracknumb)  # Add the text input widget to the GUI

        self.add_widget(self.inside)  # Add the interior layout to the main
        self.submit = Button(text="Submit", font_size=40, size_hint =(.5, .5))  # Submit button
        self.add_widget(self.submit)
        self.submit.bind(on_press=self.send_tracknumb)
        self.resultbox = Image(source="status.png")  #image box on bottom
        self.add_widget(self.resultbox)

        Window.bind(on_key_down=self.pressed)
        Clock.schedule_once(self.focus_worknumb, 1)
    def pressed(self, instance, keyboard, keycode, text, modifiers):
        if keycode == 40 or keycode == 13 or keycode == 8:
            self.send_tracknumb(None)

    def focus_worknumb(self, _):
        self.worknumb.focus = True
    def focus_tracknumb(self, _):
        self.tracknumb.focus = True
    def send_tracknumb(self, _):
        tracknumb = self.tracknumb.text
        worknumb = self.worknumb.text
        errorsound = SoundLoader.load("incorrect.mp3")  # add sound to the scanning
        correctsound = SoundLoader.load("correct.ogg")
        self.tracknumb.text = ""  # Reset text to blank in each text input
        Clock.schedule_once(self.focus_tracknumb, 0.2)
        f = open(os.path.join(download_dir_path, 'tracking.txt'), "a")
        tr = tracknumb
        wr = worknumb
        time = str(datetime.now())

编辑:我使用了下面帖子中建议的功能,但现在它显示它找不到 Android,我以某种方式从 Pycharm 中弹出的建议中安装了什么,但找不到存储和 premmisions。我在导入部分缺少什么?

标签: pythonandroidkivy

解决方案


您可以使用下面的代码片段来获取Downloadandroid 中的目录路径。然后根据需要使用路径。

from kivy.utils import platform
import os

if platform == 'android':
    from android.storage import primary_external_storage_path
    dir = primary_external_storage_path()
    download_dir_path = os.path.join(dir, 'Download')

推荐阅读