Android Question Actual path of a file

RAFA BRAVO

Active Member
Licensed User
Longtime User
I try to get the real path of a file with this code:

B4X:
Sub EventoGaleriaFotos_Result (Succes As Boolean, Dir As String, FileName As String)
    PanelElejir.Visible=False
    Dim realPath As String = GetPathFromContentResult(FileName)
    Activity.SetBackgroundImage(LoadBitmap("", GetPathFromContentResult(realPath)))
    If Succes Then  ' por si canceló
        Dim b As Bitmap
        b.Initialize(Dir, FileName)
        ImageViewIU.Bitmap = b.Rotate(90)
        Filenamex = realPath
    Else
        ToastMessageShow("No has seleccionado ninguna imagen",True)
    End If
    
End Sub

Sub GetPathFromContentResult(UriString As String) As String
    If UriString.StartsWith("/") Then Return UriString 'If the user used a file manager to choose the image
    Dim Cursor1 As Cursor
    Dim Uri1 As Uri
    Dim Proj() As String = Array As String("_data")
    Dim cr As ContentResolver
    cr.Initialize("")
    If UriString.StartsWith("content://com.android.providers.media.documents") Then
        Dim i As Int = UriString.IndexOf("%3A")
        Dim id As String = UriString.SubString(i + 3)
        Uri1.Parse("content://media/external/images/media")
        Cursor1 = cr.Query(Uri1, Proj, "_id = ?", Array As String(id), "")
    Else
        Uri1.Parse(UriString)
        Cursor1 = cr.Query(Uri1, Proj, "", Null, "")
    End If
    Cursor1.Position = 0
    Dim res As String
    res = Cursor1.GetString("_data")
    Cursor1.Close
    Return res
End Sub

i get this error:





log:
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
Tag: null, Columns: 9, Rows: 0
Id    Name    numero    marca    data    price    dir    filename    description   
** Activity (main) Pause, UserClosed = true **
** Activity (insertandupdate) Create, isFirst = true **
** Activity (insertandupdate) Resume **
** Activity (insertandupdate) Pause, UserClosed = false **
sending message to waiting queue (OnActivityResult)
running waiting messages (1)
insertandupdate_eventogaleriafotos_result (java line: 487)
java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/IMG_20201108_153751.jpg (Permission denied)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:231)
    at java.io.FileInputStream.<init>(FileInputStream.java:165)
    at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:214)
    at anywheresoftware.b4a.objects.drawable.CanvasWrapper$BitmapWrapper.Initialize(CanvasWrapper.java:516)
    at anywheresoftware.b4a.keywords.Common.LoadBitmap(Common.java:1342)
    at b4a.mySQL.insertandupdate._eventogaleriafotos_result(insertandupdate.java:487)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
    at anywheresoftware.b4a.phone.Phone$ContentChooser$1.ResultArrived(Phone.java:865)
    at anywheresoftware.b4a.BA$4.run(BA.java:585)
    at anywheresoftware.b4a.BA.setActivityPaused(BA.java:459)
    at b4a.mySQL.insertandupdate$ResumeMessage.run(insertandupdate.java:313)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6861)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

[/CODE]
 

josejad

Expert
Licensed User
Longtime User
Could this be an option?


in this example there’s a comment about loading bitmap from a uri, not sure if it could be appllicable.
 
Upvote 0
Top