Environment.getExternalStorageDirectory()
Environment.getExternalStoragePublicDirectory()
Environment.isExternalStorageLegacy()Context.getExternalFilesDir()App.user_data_dirprimary_external_storage_path() I always get:[Errno 13] Permission denied:'/storage/emulated/0'android.permissions = INTERNET, READ_EXTERNAL_STORAGEfrom kivy.app import App
from kivy.uix.label import Label
from os import listdir
from android.permissions import request_permissions,Permission,check_permission
from android.storage import app_storage_path, primary_external_storage_path
# Build for Android with: orientation = landscape
class Demo(App):
def list_dir(self):
self.msg += 'Permission Granted is '
self.msg += str(check_permission(Permission.READ_EXTERNAL_STORAGE))+'\n'
location = str(primary_external_storage_path())
self.msg += "List Dir " + location + '\n'
try:
for d in listdir(location):
self.msg+= d + '\n'
except Exception as e:
self.msg += str(e)
def callback(self,permissions,grants):
self.msg += 'Response from Dialog Box is:\n'
for p,g in zip(permissions,grants):
self.msg += str(p) + ' is ' + str(g) + '\n'
self.list_dir()
self.label.text = self.msg
def build(self):
self.msg = ""
self.label = Label()
if check_permission(Permission.READ_EXTERNAL_STORAGE):
self.msg += 'Pre Approved\n'
self.list_dir()
else:
self.msg += 'First Approval\n'
request_permissions([Permission.READ_EXTERNAL_STORAGE],
self.callback)
self.label.text = self.msg
return self.label
if __name__ == '__main__':
Demo().run()

Permission.WRITE_EXTERNAL_STORAGE
File = autoclass('java.io.File')
directory = File(location)
self.msg += str(type(directory)) + '\n'
self.msg += str(directory.getAbsolutePath()) + '\n'
self.msg += str(directory.isDirectory()) + '\n'
self.msg += str(directory.isHidden()) + '\n'
self.msg += str(type(directory.list())) + '\n'from kivy.app import App
from kivy.uix.label import Label
import os.path
from android import activity, mActivity
from jnius import autoclass
Intent = autoclass('android.content.Intent')
DocumentsContract = autoclass('android.provider.DocumentsContract')
Document = autoclass('android.provider.DocumentsContract$Document')
class Demo(App):
REQUEST_CODE = 42 # unique request ID
def set_intent(self):
intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
mActivity.startActivityForResult(intent, self.REQUEST_CODE)
def intent_callback(self, requestCode, resultCode, intent):
if requestCode == self.REQUEST_CODE:
msg = ""
try:
root_uri = intent.getData()
root_id = DocumentsContract.getTreeDocumentId(root_uri)
children = DocumentsContract.buildChildDocumentsUriUsingTree(root_uri,root_id)
contentResolver = mActivity.getContentResolver();
info = [Document.COLUMN_DISPLAY_NAME]
c = contentResolver.query(children, info, None, None, None);
while c.moveToNext():
name = str(c.getString(0))
if 'rce_plugin' not in name: # junk from Kindle App
msg += name + '\n'
c.close()
except Exception as e:
msg += str(e) + '\n'
self.label.text+=msg
def on_start(self):
self.set_intent()
def build(self):
activity.bind(on_activity_result=self.intent_callback)
self.label = Label()
return self.label
if __name__ == '__main__':
Demo().run()