گرفتن آدرس واقعی هنگام انتخاب عکس از گالری با ContentChooser در B4A
وقتی با ContentChooser یه عکسی از گالری انتخاب میکنیم آدرسی که توی رویداد ContentChooser_Result بهمون برمیگردونه طوری هست که قابل استفاده از بعضی جاها مثل “آپلود عکس” نیست.
نمونه آدرس برگردونده شده:
content://com.android.providers.media.documents/document/video%3A267481
✅ راه حل
- برای گرفتن آدرس واقعی تصویر مثل: file://sdcard/folder/img.jpg از تابع زیر استفاده کنید:
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
کتابخانه های ContentResolver و sql رو تیک بزنید.
- استفاده در رویداد ContentChooser :
Sub ContentChooser_Result (Success As Boolean, Dir As String, FileName As String) Log( GetPathFromContentResult(FileName) ) 'چاپ آدرس واقعی End Sub