Spanish ¿Cómo enviar imagen a WhatsApp?

Edgardo PuntoCom

Member
Licensed User
Longtime User
Yo estoy usando INTENT ID v1.50. Me funciona bien en Android 7 e inferiores, pero en Android 8 no me funciona.

La aplicación guarda una porción de la pantalla como imagen y después envío ese archivo a WhatsApp, Messenger, etc.

B4X:
Sub p120_Click'COMPARTIR POR WHATSAPP
            If cuadros = 0 Then
                ToastMessageShow(ley14, False)
                Return
            End If
            p112_Click
            Dim b As Bitmap
            Dim c As Canvas
            b.InitializeMutable(p200.Width, p200.Height) ' Initialize mutable bitmap to contain size of aView ...
            c.Initialize2(b) ' Get bitmap canvas ...
            Dim args(1) As Object
            Dim types(1) As String
            Dim r As Reflector
            r.Target = c
            args(0) = r.GetField("canvas") ' Get android.graphics.Canvas field ...
            types(0) = "android.graphics.Canvas"
            ' Draw aView content onto the bitmap canvas ...
            r.Target = p200
            r.RunMethod4("draw", args, types)
            If File.Exists(File.DirRootExternal, "superMEME") = True Then
            Else
                File.MakeDir(File.DirRootExternal, "superMEME")
            End If
            
            Dim rp As RuntimePermissions
            rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
            Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
            If Result Then
                Dim out As OutputStream
                out = File.OpenOutput(File.DirRootExternal & "/superMEME/", "temp321123.jpg", False)
                b.WriteToStream(out, 100, "JPEG")
                out.Close
                Dim compartir As INTENTID
                If compartir.IsInitialized = False Then compartir.Initialize
                inter
                compartir.ShareImage(File.DirRootExternal & "/superMEME/", "temp321123.jpg",True)
                'access here
            Else
                'no permission
            End If

End Sub
 

Edgardo PuntoCom

Member
Licensed User
Longtime User
Eso no me sirvió.

Pero me recomendaron con esto https://www.b4x.com/android/forum/threads/class-fileprovider-share-files.97865/ dice Erel se debe usar FileProvider

Agregue la clase. Edite el Starter. Edite el manifiesto. Tal y como lo indica.

Para enviar la imagen a WathsApp y demás cambie esto:
B4X:
                Dim out As OutputStream

                out = File.OpenOutput(File.DirRootExternal & "/superMEME/", "temp321123.jpg", False)
                b.WriteToStream(out, 100, "JPEG")
                out.Close
                Dim compartir As INTENTID
                If compartir.IsInitialized = False Then compartir.Initialize
                inter
                compartir.ShareImage(File.DirRootExternal & "/superMEME/", "temp321123.jpg",True)


por esto:
B4X:
        Dim out As OutputStream

        out = File.OpenOutput(File.DirRootExternal & "/superMEME/", "CreadoConSuperMEME.jpg", False)
        b.WriteToStream(out, 100, "JPEG")
        out.Close
        
        Dim FileName As String = "CreadoConSuperMEME.jpg"
        File.Copy(File.DirRootExternal & "/superMEME/", "CreadoConSuperMEME.jpg", Starter.Provider.SharedFolder, FileName)
        Dim in As Intent
        in.Initialize(in.ACTION_SEND, "")
        in.SetType("image/jpg")
        in.PutExtra("android.intent.extra.STREAM", Starter.Provider.GetFileUri(FileName))
        in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION
        in.WrapAsIntentChooser("Select")
        StartActivity(in)

Con esto ya funciona en Android 7 y 8.
 

josejad

Expert
Licensed User
Longtime User
Genial¡¡ Gracias por compartir la solución, nos será de utilidad a todos
 

josejad

Expert
Licensed User
Longtime User
Hola Carlos:

Deberías abrir un hilo nuevo con tu pregunta, para que si alguien busca lo mismo le sea más fácil localizarlo.
Tienes un ejemplo en este hilo que quizás pueda ayudarte, no sé si lo has visto:
 

Carlos marin

Active Member
Licensed User
Longtime User
Gracias jose por la respuesta si claro ya lo había revisado y no funciona, no para mi al menos
 

josejad

Expert
Licensed User
Longtime User
Hola de nuevo Carlos, entonces quizás sea más fácil que indiques (en un nuevo hilo, jeje) qué error o problema te da, y veamos qué puede ser, ya que parece que en el foro no hay otros métodos.

saludos,
 

victormedranop

Well-Known Member
Licensed User
Longtime User
Buen dia estimados, una pregunta sabe alguien por medio de intent mandar texto a un contacto especifico de whatsapp??? asi como en esta api
https://api.whatsapp.com/send?phone=573147208108&text=hola mundo

Trata aqui con un metodo POST a este url http://whatsapp.nowyouseeme.net:8080/endpoint
el body debe ser un JSON
estipulado de esta manera
B4X:
{"command":"mensaje","data":"Aqui va el mensaje","phone":000000000000000}
el numero de telefono es un entero no lleva ningun caracter + ni nada de eso
 

Carlos marin

Active Member
Licensed User
Longtime User
Trata aqui con un metodo POST a este url http://whatsapp.nowyouseeme.net:8080/endpoint
el body debe ser un JSON
estipulado de esta manera
B4X:
{"command":"mensaje","data":"Aqui va el mensaje","phone":000000000000000}
el numero de telefono es un entero no lleva ningun caracter + ni nada de eso
Hola victor gracias por responder, intente mandar la peticion a esa url pero no hay respuesta
pongo u ejemplo

Dim js1 As JSONGenerator

Dim mapjson As Map
mapjson.Initialize
mapjson.Put("command","mensaje")
mapjson.Put("data","mensaje de prueba")
mapjson.Put("phone","573225131673")
js1.Initialize(mapjson)

Dim strjson As String = js1.ToString

Dim j As HttpJob
j.Initialize("", Me)
j.PostString("http://whatsapp.nowyouseeme.net:8080/endpoint",strjson)
j.GetRequest.SetContentType("application/json")
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
Else
Log(j.GetString)

End If
 

victormedranop

Well-Known Member
Licensed User
Longtime User
Recuerda, phone es numérico y lo estas enviando como un string, así no va a funcionar.

Victor
 

Carlos marin

Active Member
Licensed User
Longtime User
Recuerda, phone es numérico y lo estas enviando como un string, así no va a funcionar.

Victor

Lo mande numérico y me respondió con un código {"UUIDSerial":"boos0j620pvukd91kujg"} pero al wathsapp igual no llega nada, o que hay que hacer con ese codigo. de nuevo gracias victor
 
Top