Italian inviare anche un immagine dal telefono su whatsapp

fifiddu70

Well-Known Member
Licensed User
Longtime User
ciao a tutti, sto utilizzando il codice di esempio di whastapp acc services realizzato da moster, in questo esempio puoi inviare in modo automatico senza premere il pulsante invio un messaggio di testo ad un numero prestabilito, avrei la necessità di inviare anche una immagine insieme al testo, qualcuno sa dirmi come fare? allego codice completo:
ovviamente c'è anche un modulo di servizio che non ho allegato perchè credo che vada aggiunto qualcosa solo nel modulo main.
B4X:
#Region  Project Attributes
    #ApplicationLabel: WhatsAppAccService
    #VersionCode: 2
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
    
    'adding additional resources. Modify below attribute to make it point to your location.
    #AdditionalRes: C:\test1\resAccessibility\res, com.tillekesoft.accessibilityservices
    
    
    'In above resource folder, there are two files to change according to your needs. For this example,
    'it would be a good idea to tell the Accessibility Service to monitor only the whatsApp package...
    'Check also the manifest in which you need to add some lines....
    
    'for this example, you need to fill in phone numbers and group links. Of course, in a real
    'app you would let the user do that....
    
    
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
    
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private lblDesc As Label
    Private btnAccessibility As Button
    Private CheckBox1 As CheckBox
    Private btnAction As Button
    
    Private txtMsg As EditText
    Private btnSend As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    StartService(AccService)
    
End Sub



Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub



Sub btnAccessibility_Click
    CallSub(AccService,"CheckIfServiceIsEnabled")
End Sub

Sub SetCheckbox(Checked As Boolean)
    If Checked Then
        CheckBox1.Checked = True
    Else
        CheckBox1.Checked = False
    End If
End Sub

Sub IsTheAccessibilityServiceEnabled (Status As Boolean)
    If Status = False Then
        Dim Intent1 As Intent
        Intent1.Initialize( "android.settings.ACCESSIBILITY_SETTINGS", "" )
        StartActivity( Intent1 )
    Else
        ToastMessageShow("Service is already enabled/running",True)
        Return
    End If
End Sub

Sub btnAction_Click
    If txtMsg.Text.Length > 0 Then
        Dim link As String = "xxxxxxxxxxxxxxxxxxxxxx"  'insert group link. Can only be seen in WhatsApp by user who created the group
        Dim Url As String = "https://chat.whatsapp.com/" & link

        Dim Intent1 As Intent
        Dim pm As PackageManager
        Intent1 = pm.GetApplicationIntent("com.whatsapp")
        If Intent1.IsInitialized Then
            'Se WhatsApp è installato
            Dim Intent2 As Intent
            Intent2.Initialize(Intent2.ACTION_VIEW, Url)
            StartActivity(Intent2)
        Else
            ToastMessageShow("WhatsApp is not installed", True)
            Return
        End If
        
        CallSub2(AccService, "SendWhatsAppMsgToGroup", txtMsg.Text.Trim)

    End If

End Sub


Sub btnSend_Click
    
    If txtMsg.Text.Length > 0 Then

        Dim number As String = "+39123456789" 'here goes the phone number of the contact
        number = number.Replace("+","").Replace(" ","")
        Dim messaggio As String = txtMsg.Text.trim
        Dim numero As String = number
        Dim Intent1 As Intent
        Dim pm As PackageManager
        Intent1 = pm.GetApplicationIntent("com.whatsapp")
        If Intent1.IsInitialized Then
            'If WhatsApp is installed..
            Dim Intent2 As Intent
            Intent2.Initialize(Intent2.ACTION_VIEW, $"https://wa.me/${numero}?text=${messaggio}"$)
            StartActivity(Intent2)
        Else
            ToastMessageShow("WhatsApp is not installed", True)
            Return
        End If
        
    End If
    
    CallSub(AccService,"SendWhatsAppMsg")
    
End Sub
 

sirjo66

Well-Known Member
Licensed User
Longtime User
il codice che hai allegato serve solo per chiamare l'intent e far partire quindi whtasapp, passandogli il numero di telefono e il testo che deve spedire, cioè questa linea:
B4X:
Intent2.Initialize(Intent2.ACTION_VIEW, $"https://wa.me/${numero}?text=${messaggio}"$)
una volta che whatsapp si è caricato l'utente deve premere comunque il pulsante "invio"

Se guardi il file AccService.bas vedrai quindi che è lì la parte che si occupa di premere il tasto "invio" senza che lo faccia l'utente e quindi il messaggio parte in automatico.
La linea che si occupa di premere il pulsante è questa:
B4X:
success = acs.PerformNodeActionOnViewWithArgs(True, "com.whatsapp:id/send",AccServConstants.ACTION_CLICK, Null)
dove si vede l'id del bottone che è "com.whatsapp:id/send"
Se vuoi inviare anche immagini devi quindi analizzare la schermata di whatsapp, trovare quale è l'id del bottone "allega", simulare il click usando la stessa riga di prima, trovare quale è l'id del pulsante "galleria" (che è apparso), simulare il click ed andare avanti così fino all'immagine voluta.
Praticamente impossibile
 

amorosik

Expert
Licensed User
il codice che hai allegato serve solo per chiamare l'intent e far partire quindi whtasapp, passandogli il numero di telefono e il testo che deve spedire, cioè questa linea:
B4X:
Intent2.Initialize(Intent2.ACTION_VIEW, $"https://wa.me/${numero}?text=${messaggio}"$)
una volta che whatsapp si è caricato l'utente deve premere comunque il pulsante "invio"

Se guardi il file AccService.bas vedrai quindi che è lì la parte che si occupa di premere il tasto "invio" senza che lo faccia l'utente e quindi il messaggio parte in automatico.
La linea che si occupa di premere il pulsante è questa:
B4X:
success = acs.PerformNodeActionOnViewWithArgs(True, "com.whatsapp:id/send",AccServConstants.ACTION_CLICK, Null)
dove si vede l'id del bottone che è "com.whatsapp:id/send"
Se vuoi inviare anche immagini devi quindi analizzare la schermata di whatsapp, trovare quale è l'id del bottone "allega", simulare il click usando la stessa riga di prima, trovare quale è l'id del pulsante "galleria" (che è apparso), simulare il click ed andare avanti così fino all'immagine voluta.
Praticamente impossibile

Quando dici "..analizzare la schermata di WhatsApp..." cosa intendi dire esattamente?
Come si fa ad 'analizzare' la schermata se e' dentro un'app (e non un browser web)?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Quando dici "..analizzare la schermata di WhatsApp..." cosa intendi dire esattamente?
Come si fa ad 'analizzare' la schermata se e' dentro un'app (e non un browser web)?

Se analizzi il file AccService.bas troverai la routine
Sub acs_OnAccessibilityEvent (Event As Object, Node As Object)
che viene chiamata continuamente durante l'attività dell'Activity
Analizzando l'oggetto Node trovi tutti gli oggetti dell'Activity con i relativi ID e le varie proprietà.
Ad esempio, quando l'utente invia un messaggio whatsapp ad un numero di cellulare che però non ha whatsapp, appare un messaggio di errore che dice che l'utente non ha whatsapp.
A questo punto il programma, analizzando l'oggetto Node, trova che è apparso questo MsgBox, legge il testo relativo, simula il click sul pulsante "OK" e ritorna il messaggio di errore mostrandolo a video sul programma realizzato su PC windows che ha inviato il comando al telefonino
Almeno questo fa il mio programma che funziona perfettamente.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
ECCoMI !!! mizzica a schifiu finiu !!! adesso si che mi trovo in difficoltà, mi sa che qualcuno dovrà farmi dei tutorial video per imparare ad usare bene questo linguaggio, alla nascita di b4a li realizzavo ed i miei video erano molto apprezzati, ma adesso faccio una domanda da 1 milione di dollari.....Sirjio66 dice:
Bellissimo il codice,
anche se bisogna capire se Fifiddu è in grado di portarlo in B4A,
e poi capire come identificare l'immagine da inviare tramite il suo ID
scusami cosa intendi esattamente, ......il codice lo sto realizzando con B4A o forse mi sono perso qualcosa dagli ultimi aggiornamenti? perchè in effetti quando faccioun nuovo progetto vedo che mi dice come farlo? B4Xpages, B4Xturtle, predefinito, x2games, io di solito scelgo predefinito che dovrebbe essere il vecchio B4A giusto? comunque per me risulta strano capire gli ultimi aggiornamenti di questo software perchè non ho avuto tempo di studiarli, ho visto che alcuni lavorano con B4X ma quali sono le differenze di tutti questi tipi diversi? ritornando al titolo del post, pensavo che era facile inviare l'immagine ma se si devono intercettare i vari pulsanti : allega file, immagine etc, mi sa che la vedo davvero dura.
 

LucaMs

Expert
Licensed User
Longtime User
mizzica a schifiu finiu !!!
Guarda il lato positivo: potrebbe finire pure peggio che a schifiu 😄

Bellissimo il codice,
anche se bisogna capire se Fifiddu è in grado di portarlo in B4A,
e poi capire come identificare l'immagine da inviare tramite il suo ID
scusami cosa intendi esattamente,
Si riferiva al codice Java in quella pagina, non a b4a.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Vi faccio questa domanda, ma non sarebbe meglio allora studiare java rispetto al b4a? certo sarà molto difficile ma almeno credo e spero che sia molto più realizzabile qualsiasi cosa, mi sembra che il b4a sia mollto limitato su molti aspetti.
 

Star-Dust

Expert
Licensed User
Longtime User
Quello che puoi fare in Java puoi farlo in B4A. Tanto vale studiarti bene B4A che già qualcosa la conosci che Java per Android che devi partire da zero.

Poi è vero che su GitHub trovi molto sorgenti che devi solo copiare e incollare, cosa che non trovi per B4A.
Quindi se la domanda è: Non è meglio sviluppare in Java così trovo tanto codice in giro e posso copiarlo nei miei sorgenti?
La risposta è: No, perché anche copiare un codice in Java nei propri sorgenti potrebbe essere difficile da fare in base al contesto.

Tornando all'argomento del thread che sarebbe: Se è possibile inviare un immagine con WhatsApp senza il consenso dell'utente, la risposta è: non si può. Tutti i metodi e gli intent che lo consentivano sono stati disabilitati da WhatsApp per motivi di sicurezza.
Tutti i sorgenti che trovi sono vecchi e usano metodi non più attivi, quindi non funzioneranno.
Non serve andare in giro a cercare altri codici, sul sito ufficiale trovi i metodi Java consentiti. Questi metodi richiedono il consenso dell'utente.

L'unica cosa permessa con la libreria Accessibilty (che nasce per chi ha delle disabilità) poter inviare un testo senza un consenso dell'utente, consenso che viene dato all'app al momento dell'installazione.
 
Last edited:

moster67

Expert
Licensed User
Longtime User
Diversamente di quello che è stato detto qui negli ultimi post, con AccessibilityServices si può inviare testo e immagini tranquillamente ma anche pdf, video ed altri allegati che WhatsApp supporta. Ci sono "intents" in giro che si trova cercando bene, anche nella parte oscura dell'internet :)

ecco la mia sample-app dal mio thread dell'AccessibilityServices modificata per permettere invio di immagini:

 
Last edited:
Top