Android Code Snippet Share an image by its bitmap

This can be modified to any file type by changing the MIME type and using the file path as the Sub argument
B4X: Copy
Sub ShareImage(bmp As Bitmap)
    ' Save image 
    Dim filename As String = "image.jpg"
    Dim outDir As String = File.DirInternal
    File.Delete(outDir, filename)
    Dim out As OutputStream = File.OpenOutput(outDir, filename, False)
    bmp.WriteToStream(out, 100, "JPEG")
    out.Close

    Dim ctxt As JavaObject
    ctxt.InitializeContext
    Dim fileObj As JavaObject
    fileObj.InitializeNewInstance("java.io.File", Array(outDir, filename))
    Dim provider As String = Application.PackageName & ".provider"
    Dim FileProvider As JavaObject
    FileProvider.InitializeStatic("androidx.core.content.FileProvider")
    Dim uri As Object = FileProvider.RunMethod("getUriForFile", Array(ctxt, provider, fileObj))
    
    Dim i As Intent
    i.Initialize(i.ACTION_SEND, "")
    i.SetType("image/*")
    i.PutExtra("android.intent.extra.STREAM", uri)
    i.Flags = Bit.Or(i.Flags, 1) ' FLAG_GRANT_READ_URI_PERMISSION

    'chooser
    Dim jo As JavaObject = i
    Dim chooser As Intent = jo.InitializeStatic("android.content.Intent") _
        .RunMethod("createChooser", Array(i, "Share Image via..."))

    StartActivity(chooser)
End Sub

XML: Copy
AddManifestText(<uses-permission
   android:name="android.permission.WRITE_EXTERNAL_STORAGE"
   android:maxSdkVersion="18" />
)

AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
CreateResource(xml, provider_paths,
   <files-path name="internal_files" path="." />
)
 
Back
Top