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:
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:
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="." />
)
 
Top