Italian Content chooser

nicolino33

Active Member
Licensed User
Longtime User
Buongiorno a tutti, sapete se esiste un metodo compatibile con tutti i dispositivi che sia in grado di restituire l'indirizzo di un file senza incappare negli errori del classico content chooser? Dico errori perché ad esempio col Samsung s8 non funziona, restituisce una stringa vuota, mentre in altri va senza problemi.

In particolare, noto che nonostante il content sia inizializzato con CC.Show("image/*", "Choose image") visualizza anche file non presenti nel dispositivo, ad esempio su account Google, ed ecco che quando si tenta di estrapolare l'indirizzo con GetPathFromContentResult restituisce una null.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Io usavo queste due routine (la prima è ovviamente l'evento del ContentChooser); fammi sapere se funzionano (in particolare sul S8), benché per adesso io le abbia messe in cantina :D (nella CC_Result vengono chiamate routine della mia app, che chiaramente toglierai):

B4X:
Sub CC_Result (Success As Boolean, Dir As String, FileName As String)
   Dim bmpSample As Bitmap = Null

   If Not(Success) Then

       ReturnImage(bmpSample)

   Else

       Dim Error As Boolean = False
       
       If Dir <> "" Or FileName <> "" Then
           Try
               bmpSample = LoadBitmapSample(Dir, FileName, 100%x, mWorkingRoomHeight)
           Catch
               Error = True
           End Try
           
           If Error Then
               Try
                   bmpSample = LoadBitmapSample(Dir, GetPathFromContentResult(FileName), 100%x, mWorkingRoomHeight)
               Catch
                   Log(LastException)
               End Try
           End If
       End If
       
       If Error Then
           ReturnImage(bmpSample)
       Else
           ImageChosen
       End If

   End If
   
End Sub


B4X:
Private 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
 

nicolino33

Active Member
Licensed User
Longtime User
Ciao Luca, in effetti non avevo pensato a provare a far caricare direttamente la foto in una bmp, in questo modo se dovesse funzionare il problema è risolto, in quanto una volta estrapolata la bmp si può fare ciò che si vuole, provo grazie!
 
Top