Hi. Here my (incomplete & with some bugs) android\data file browser. Requires ContentChooser library to be selected.
B4A:
#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#AdditionalJar:androidx.documentfile:documentfile
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
Private xui As XUI
Private ion As Object 'Ignore
Dim jo As JavaObject
Dim rootUri,fatherUri As Object
Type myRec (name As String, isDir As Boolean, fileUri As Object)
End Sub
Sub Globals
Dim browse As ListView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Dim j As JavaObject = GetBA
ion = j.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
jo.InitializeContext
jo.RunMethod("getAndroidDataFolder",Null)
browse.Initialize("myBrowse")
browse.Color=Colors.DarkGray
Activity.AddView(browse,0,0,100%x,100%y)
End Sub
Sub Activity_Resume
End Sub
Sub ion_Event (MethodName As String, Args() As Object) As Object
Dim i As Intent
Dim u As Uri
i=Args(1)
u.Parse(i.GetData)
rootUri=u
fatherUri=u
Dim files As List = jo.RunMethod("ListFiles",Array(u))
For Each rec As myRec In files
browse.AddSingleLine2(rec.name,rec)
Next
Return Null
End Sub
Sub myBrowse_ItemClick (Position As Int, Value As Object)
Dim r As myRec = Value
If r.isDir Then
browse.Clear
Dim files As List = jo.RunMethod("ListFiles",Array(r.fileUri))
r.fileUri = fatherUri
fatherUri = r.fileUri
r.isDir=False
r.name=".."
browse.AddSingleLine2("..",r)
For Each rec As myRec In files
browse.AddSingleLine2(rec.name,rec)
Next
Else
If r.name.CompareTo("..")=0 Then
Log(fatherUri)
Dim files As List = jo.RunMethod("ListFiles",Array(fatherUri))
r.fileUri = fatherUri
r.isDir=False
r.name=".."
browse.Clear
browse.AddSingleLine2("..",r)
For Each rec As myRec In files
browse.AddSingleLine2(rec.name,rec)
Next
End If
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Private Sub GetBA As Object
Dim jo As JavaObject
Dim cls As String = Me
cls = cls.SubString("class ".Length)
jo.InitializeStatic(cls)
Return jo.GetField("processBA")
End Sub
#if JAVA
import android.os.storage.StorageManager;
import android.content.Context;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import androidx.documentfile.provider.DocumentFile;
public static void getAndroidDataFolder(){
Context context = processBA.context;
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
int REQUEST_ACTION_OPEN_DOCUMENT_TREE = 101;
Intent intent = sm.getPrimaryStorageVolume().createOpenDocumentTreeIntent();
String startDir = "Android/data";
Uri uri = intent.getParcelableExtra("android.provider.extra.INITIAL_URI");
String scheme = uri.toString();
scheme = scheme.replace("/root/", "/document/");
startDir = startDir.replace("/", "%2F");
scheme += "%3A" + startDir;
uri = Uri.parse(scheme);
intent.putExtra("android.provider.extra.INITIAL_URI", uri);
processBA.startActivityForResult((anywheresoftware.b4a.IOnActivityResult)_ion, intent);
}
public static java.util.List ListFiles(Uri uri){
DocumentFile dir = DocumentFile.fromTreeUri(processBA.context, uri);
DocumentFile[] fileListed = dir.listFiles();
java.util.List <_myrec> data = new java.util.ArrayList<_myrec>();
//data.Initialize();
for(int i = 0;i < fileListed.length;i++){
//BA.Log(fileListed[i].getName());
_myrec r = new _myrec();
r.name = fileListed[i].getName();
r.isDir = fileListed[i].isDirectory();
r.fileUri = fileListed[i].getUri();
data.add( r );
}
return data;
}
#End If