Italian [Risolto] inviare / condividere immagine con whatsapp

Xfood

Expert
Licensed User
Longtime User
ciao a tutti,
stavo provando d una mia app a condividere un'immagine che ho in dir.assest, ma non la condivide,
whatsapp mi dice non supportato, come mai?
ecco il mio codice, cosa sbaglio?
B4X:
Sub Globals
Public Provider As FileProvider
End Sub
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("lyt2")
 
    Provider.Initialize
 CondividiImg("images.jpg")
End Sub

'==============================
' il mio Manifest
'=============================
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="name" path="shared" />
)
'===================================


Private Sub CondividiImg(immaggine As String)
    Dim FileName As String = immaggine
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)
    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)
    in.SetComponent("android/com.android.internal.app.ResolverActivity")
    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.SetFileUriAsIntentData(in, FileName))
    StartActivity(in)
End Sub
 

Xfood

Expert
Licensed User
Longtime User
ho provato anche questo esempio

modificando solo la parte di visualizza in invia
ma non funziona, cavolo le nuove regole di google????
B4X:
Private Sub btnViewImage_Click
    Dim FileName As String = "b4a.png"
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)
    Dim in As Intent
    'in.Initialize(in.ACTION_VIEW, "")     ' mia modifica disabilitata riga '
    in.Initialize(in.ACTION_SEND, "")     ' aggiunta per scelta invio'
    Provider.SetFileUriAsIntentData(in, FileName)
    'Type must be set after calling SetFileUriAsIntentData
    in.SetType("image/*")
    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Ho provato (mai fatto prima) e così funziona (anche se ho condiviso con Telegram, non con WhatsApp, ma non dovrebbe cambiare alcunché):
B4X:
Private Sub ShareImg
    Dim FileName As String = "b4a.png"
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)
    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)
    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.GetFileUri(FileName))
    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub

Manifest:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="35"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'End of default text.

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="name" path="shared" />
)
 

Xfood

Expert
Licensed User
Longtime User
Ho provato (mai fatto prima) e così funziona (anche se ho condiviso con Telegram, non con WhatsApp, ma non dovrebbe cambiare alcunché):
B4X:
Private Sub ShareImg
    Dim FileName As String = "b4a.png"
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)
    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)
    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.GetFileUri(FileName))
    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub

Manifest:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="35"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
'End of default text.

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="name" path="shared" />
)
ottimo funziona, si potrebbe aggiungere anche il testo in un'unica chiamata?
tipo:

B4X:
Private Sub ShareImg
    Dim FileName As String = "b4a.png"
    Dim testo as string ="ecco il file che mi avevi chiesto"
' poi come inserirlo?
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)
    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)
    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.GetFileUri(FileName))
    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
si potrebbe aggiungere anche il testo in un'unica chiamata?
Che ostia ne so? 😁 ...
Ho provato (mai fatto prima)
Credo sia poco probabile; al limite si potrebbe provare a selezionare testo e immagine da un "editor", metterli nella clipboard e provare ad inviare da questa (o salvare come file di testo ed inviare questo).

Ma non fidarti di ciò che sto scrivendo, dato che appunto non avevo mai provato; forse si potrebbe con degli Extra.
Ok, dato che mi diverte, chiedo a qualche IA...
 

LucaMs

Expert
Licensed User
Longtime User
forse si potrebbe con degli Extra.
Ok, dato che mi diverte, chiedo a qualche IA...

(Copilot)
1771314189746.png


B4X:
Private Sub ShareImg
    Dim FileName As String = "b4a.png"
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)

    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)

    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.GetFileUri(FileName))
    in.PutExtra("android.intent.extra.TEXT", "Questo è il testo da condividere insieme all'immagine")

    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub
 

Xfood

Expert
Licensed User
Longtime User
(Copilot)
View attachment 169966

B4X:
Private Sub ShareImg
    Dim FileName As String = "b4a.png"
    File.Copy(File.DirAssets, FileName, Provider.SharedFolder, FileName)

    Dim in As Intent
    in.Initialize(in.ACTION_SEND, "")
    Provider.SetFileUriAsIntentData(in, FileName)

    in.SetType("image/*")
    in.PutExtra("android.intent.extra.STREAM", Provider.GetFileUri(FileName))
    in.PutExtra("android.intent.extra.TEXT", "Questo è il testo da condividere insieme all'immagine")

    in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
    StartActivity(in)
End Sub
Fantastico, funzionaaaaaa, Grazie Milleee
 
Top