قرار دادن عکس در گالری از assets در B4A

سلام

کد زیر رو ارل، چن دقیقه پیش گذاشت، با این کد میتونید یه عکس از برنامه رو تو گالری ذخیره کنید. (میتونه خیلی کاربردی باشه)

Sub AddBitmapToGallery (In As InputStream, TargetName As String, MimeType As String)
    Dim p As Phone
    Dim ctxt As JavaObject
    ctxt.InitializeContext
    If p.SdkVersion >= 29 Then
        Dim cr As ContentResolver
        cr.Initialize("cr")
        Dim values As ContentValues
        values.Initialize
        values.PutString("_display_name", TargetName)
        values.PutString("mime_type", "image/png")
        Dim MediaStoreImagesMedia As JavaObject
        MediaStoreImagesMedia.InitializeStatic("android.provider.MediaStore.Images$Media")
        Dim EXTERNAL_CONTENT_URI As Uri = MediaStoreImagesMedia.GetField("EXTERNAL_CONTENT_URI")
        cr.Delete(EXTERNAL_CONTENT_URI, "_display_name = ?", Array As String(TargetName))
        Dim imageuri As JavaObject = cr.Insert(EXTERNAL_CONTENT_URI, values)
        Dim out As OutputStream = ctxt.RunMethodJO("getContentResolver", Null).RunMethod("openOutputStream", Array(imageuri))
        File.Copy2(In, out)
        out.Close
    Else
        Dim rp As RuntimePermissions
        rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
        Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity if not using B4XPages
        If Result Then
            Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "Pictures/" & TargetName, False)
            File.Copy2(In, out)
            out.Close
            Dim FilePath As String = File.Combine(File.DirRootExternal, "Pictures/" & TargetName)
            Dim MediaScannerConnection As JavaObject
            MediaScannerConnection.InitializeStatic("android.media.MediaScannerConnection")
            Dim interface As Object = MediaScannerConnection.CreateEventFromUI("android.media.MediaScannerConnection.OnScanCompletedListener", "ScanCompleted", _
                   Null)
            MediaScannerConnection.RunMethod("scanFile", Array(ctxt, Array As String(FilePath), Array As String(MimeType), interface))
            Wait For ScanCompleted_Event (MethodName As String, Args() As Object)
            Log(Args(0))
            Log(Args(1))
        End If
    End If
End Sub

 

ساب زیر رو به اکتیویتی اضاف کنید و به شکل زیر ازش استفاده کنید:

 

AddBitmapToGallery(File.OpenInput(File.DirAssets, "logo.png"), "logo.png", "image/png")

 

برای استفاده، فعال بودن کتابخونه های زیر، ضروریه:

Phone

JavaObject

ContentResolver

 

توجه کنید که این کد، نیازی به هیچ دسترسی نداره. (حتی اندروید ۱۰)

 

موفق باشید

 

دیدگاهتان را بنویسید