I am making android app with kivy and python, I have function what will create record in TXT format, in my Project it is in same folder as the .PY file, but i know once i create .apk then it can be problem where the file will be stored. For example I would like to store that Tracking.txt file in Download folder of Android device. How i can define this please?
This is how it is defined now, it should safe/open file where is the app.
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())
Edit: I used the function suggested in post below, but now it showing that it cannot find the Android, what i somehow installed from the suggestion what pop up in Pycharm, but the storage and premmisions are not found. What am i missing in Import part?
Advertisement
Answer
You can use the below code snippet to get hold of the Download
directory path in android. And then use the path as appropriate.
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')