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