Android Question [Solved] translate to B4A please

noeleon

Member
Licensed User
I want the system filepicker to start in a previously saved folder. Upon searching the web I found this, which requires api26+

intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, your_initial_uri);

I've already tried a lot of variations for the first parameter bu still no luck. Help please.
 

stevel05

Expert
Licensed User

noeleon

Member
Licensed User
Hi @stevel05!

Still not working. There is no error and no prompt for any permission.

Maybe my second parameter is wrong? I got that from the log running the code below. I'm using Android 10


B4X:
Sub Process_Globals
    Private ion As Object
End Sub

Sub Globals
End Sub

Sub Activity_Create(FirstTime As Boolean)
End Sub

Sub Activity_Click
    Dim i As Intent
    i.Initialize("android.intent.action.GET_CONTENT", "")
    i.PutExtra("android.intent.extra.ALLOW_MULTIPLE", True)
    i.putExtra("android.provider.extra.INITIAL_URI", "content://com.android.externalstorage.documents/document/primary%3Abluetooth%2F")
    i.SetType("image/*")
    StartActivityForResult(i)
End Sub

Sub ion_Event (MethodName As String, Args() As Object) As Object
    If Args(0) = -1 Then 'resultCode = RESULT_OK
        Dim i As Intent = Args(1)
        Dim jo As JavaObject = i
        'Android 4.1+ (API 16)
        Dim uris As List
        uris.Initialize
        Dim clipdata As JavaObject = jo.RunMethod("getClipData", Null)
        If clipdata.IsInitialized Then
            Dim count As Int = clipdata.RunMethod("getItemCount", Null)
            For i2 = 0 To count -1
                Dim item As JavaObject = clipdata.RunMethod("getItemAt", Array(i2))
                uris.Add(item.RunMethod("getUri", Null))
            Next
        Else
            uris.Add(i.GetData)
        End If
        Log(uris)
    End If
    Return Null
End Sub

Sub StartActivityForResult(i As Intent)
    Dim jo As JavaObject = GetBA
    ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
    jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub

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
 

noeleon

Member
Licensed User
doesn't work on tree uri too
content://com.android.externalstorage.documents/tree/primary%3Abluetooth
 

stevel05

Expert
Licensed User
I have not used this, and am not sure how permissions play a part (if at all) with this process but accessing external drives always appears problematic. Does it work if you set the parameter to point at an internal file path?
 
Top