python - 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。我在导入部分缺少什么?
解决方案
您可以使用下面的代码片段来获取Download
android 中的目录路径。然后根据需要使用路径。
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')
推荐阅读
- excel - 在 Word 中查找字符串和选择字符串,包括下一个单词
- javascript - 如何同时附加两个输入字段并在每个条目后跳行
- javascript - 从一串字节显示图像
- r - 获取逗号分隔字符串列之间的公共元素(来自同一行),保留行名
- html - 从段落中删除
和空白 - regex - 运行时错误 424:对象需要 - 使用 API 链接提取数据
- java - Spark 通过 oozie 工作流程提交抛出 NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(object,object,object)
- c# - WPF 自定义 TreeView 控件的 SelectedItemChanged 事件
- unity3d - 是什么导致了这些灯光效果?
- javascript - 如何通过reduce方法js对数组元素求和