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中弹出的建议中安装了什么,但没有找到存储和premisions。进口部分缺少什么?

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

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')

最新更新