Autore Topic: inviare messaggio tramite whattsapp  (Letto 2518 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
inviare messaggio tramite whattsapp
« il: 30 Gennaio 2013, 13:01:09 CET »
0
Salve, volevo aggiunger alla mia app (cifrario di cesare https://play.google.com/store/apps/details?id=cifrario.cesare&hl=it ) la possibilità di inviare il testo criptato anche attraverso whattsapp
che voi sappiate esiste una qualche libreria per far ciò semplicemente?

Grazie
nel frattempo continuo a googlare, ma non ho ancora trovato nada

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:inviare messaggio tramite whattsapp
« Risposta #1 il: 30 Gennaio 2013, 14:03:30 CET »
+1
piu che libreria, credo tu debba usare un intent
android intent - I want to share my text with whatsapp from my app? - Stack Overflow
http://pastebin.com/eaMbKRhe
provali,non li ho mai provati
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:inviare messaggio tramite whattsapp
« Risposta #2 il: 30 Gennaio 2013, 16:28:46 CET »
0
grazie per gli input
purtroppo niente da fare...
sfruttando questa stringa:



String uri = "smsto:+123456";
Intent messageIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
messageIntent.putExtra("sms_body", "My Message");
startActivity(messageIntent);


richiamo tutti i serviziche sono in ascolto sull'intent action_sendto, quindi whattsapp, viber, messaggi skype e simili
però inserendo il corpo del messaggio come "my message", l'applicazione messaggi (quella nativa) lo accetta, mentre whattsapp mi lascia il campo vuoto, quindi probabilmente non prendono quel valore dall'intent
nel frattempo ho scritto un messaggio agli autori, vedremo se rispondono


Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:inviare messaggio tramite whattsapp
« Risposta #3 il: 30 Gennaio 2013, 17:14:17 CET »
+2
Non mi risulta che esistano al momento API ufficiali.

Tuttavia Whatsapp espone una ShareActionProvider, tramite il quale puoi arrivare al tuo scopo.
L'utilizzo di un qualsiasi ShareActionProvider passa attraverso la definizione banale in una Activity di un codice simile a questo:

Codice (Java): [Seleziona]
 @Override
    ......
    public boolean onCreateOptionsMenu(Menu menu) {
 
        /** Inflating the current activity's menu with res/menu/items.xml */
        getMenuInflater().inflate(R.menu.items, menu);
        /** Getting the actionprovider associated with the menu item whose id is share */
        mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();
         /** Setting a share intent */
        mShareActionProvider.setShareIntent(getDefaultShareIntent());
        return super.onCreateOptionsMenu(menu);
 
    }

   /** Returns a share intent */
    private Intent getDefaultShareIntent(){
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
        intent.putExtra(Intent.EXTRA_TEXT,".....:TUO TESTO .............");
        return intent;
    }


Per inserirlo nella actionBar è sufficiente questo.

Codice (XML): [Seleziona]
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
       android:id="@+id/share"
       android:title="@string/share"
       android:showAsAction="ifRoom"
       android:actionProviderClass="android.widget.ShareActionProvider"
   />
</menu>

Chiaramente devi adattare tutto al tuo caso, e chiaramente la ShareActionProvider non è solo per whatsapp, ma per tutti i servizi che la espongono nel device dove è installata l'app.

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:inviare messaggio tramite whattsapp
« Risposta #4 il: 30 Gennaio 2013, 17:15:54 CET »
0
grazie, provo e aggiorno questo topic...

edit:
uhm non riesco a farlo con il menù inflater
ma tecnicamente quello che hai messo nel metodo sotto, è proprio quello che vado a fare, e mi genera errore

"01-30 16:09:25.818: E/AndroidRuntime(1032): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO typ=text/plain (has extras)"
« Ultima modifica: 30 Gennaio 2013, 17:22:10 CET da gabric, Reason: progressi.. »

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:inviare messaggio tramite whattsapp
« Risposta #5 il: 30 Gennaio 2013, 18:17:57 CET »
0
progressi...
nell'intent inserendo il mime typo come plain/text e anche come text/plain non funziona, gestendo l'eccezione (sia sul terminale che su dispositivo fisico) mi segnala [size=78%] [/size]No Activity found to handle Intent
[/size]googlando non riesco proprio a trovare nada...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:inviare messaggio tramite whattsapp
« Risposta #6 il: 30 Gennaio 2013, 18:44:53 CET »
+1
Io per questo uso la classe ShareCompat presente nelle support lib:

Codice (Java): [Seleziona]
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder
                        .from(LaMiaActivity.this).setType("text/plain")
                        .setText("Testo");

startActivity(builder.createChooserIntent());

A me questo codice funziona perfettamente...  anche se a occhio dovrebbe funzionare ugualmente quello di GabMarioPower.

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:inviare messaggio tramite whattsapp
« Risposta #7 il: 30 Gennaio 2013, 19:05:29 CET »
0
scusa l'ignoranza..


"ShareCompat cannot be resolved to a type"
ho fatto unaminiricerca per saper cosa sono, ma non riesco a importare le share compat

edit, con android 17 trova il metodo, però non so come passargli il numero di telefono e il testo
idee?
inoltre volevo chiedervi da che versione è disponibile questo metodo, così da renderlo il più retro-compatibile possibile
« Ultima modifica: 30 Gennaio 2013, 19:13:44 CET da gabric »

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:inviare messaggio tramite whattsapp
« Risposta #8 il: 30 Gennaio 2013, 19:33:06 CET »
+1
Quel tipo di errore (android.content.ActivityNotFoundException: No Activity found to handle Intent)  in genere lo si ha quando non c'è nessuna Activity che può soddisfare l'Intent.

Il mio era un codice as-is che chiaramente va affinato.
Codice (Java): [Seleziona]
       
        Intent intent= getDefaultShareIntent();
        if(intent!=null)
            mShareActionProvider.setShareIntent(intent);


Prova a fare una semplice prova, senza utilizzare il widget in ActionBar (che mi sembra richieda android 4.0) , lanciando con un bottone o un menu questo banale codice:

Codice (Java): [Seleziona]
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

Con questo codice il sistema cerca se c'è una applicazione con un filtro che corrisponde ad una action=ACTION_SEND e un  MIME type = text/plain
Se la trova la lancia, se ne trova più di una ti chiede di scegliere.

E' una buona regola controllare se l'intent può essere risolta ...
Codice (Java): [Seleziona]
PackageManager pm = getPackageManager();
ComponentName cn = intent.resolveActivity(pm);
if (cn==null) {
     .....
}else
     startActivity(intent);

Offline gabric

  • Utente senior
  • ****
  • Post: 614
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:inviare messaggio tramite whattsapp
« Risposta #9 il: 30 Gennaio 2013, 19:44:36 CET »
0
il codice funziona, ma non posso inviare il numero.
invece con Intent.ACTION_SENDTO posso passare come secondo parametro l'uri del numero, e mi genera l'eccezione...

edit
ho deciso che abbandono il numero di telefono. in questo modo posso sfruttare più servizi, e il numero si aggiunge dopo in un attimo
grazie mille!
« Ultima modifica: 30 Gennaio 2013, 20:00:11 CET da gabric »

Offline Smith

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
  • Sistema operativo:
    Ubuntu 13.04
Re:inviare messaggio tramite whattsapp
« Risposta #10 il: 28 Maggio 2013, 16:00:43 CEST »
0
Salve a tutti...
mi riallaccio a questo post per avere chiarimenti a proposito della ShareActionProvider in una ContextualActionBar messa su con una ActionMode.Callback in questa maniera:

Codice (Java): [Seleziona]
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {          
               
                private ShareActionProvider mShareActionProvider;
               
                @Override
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                        // TODO Auto-generated method stub
                        return false;
                }
               
                @Override
                public void onDestroyActionMode(ActionMode mode) {
                        // TODO Auto-generated method stub
                        mActionMode = null;                    
                }
               
                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        // TODO Auto-generated method stub
                        mode.getMenuInflater().inflate(R.menu.context_menu, menu);                     
                        return true;
                }
               
                @Override
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                        // TODO Auto-generated method stub
                        switch(item.getItemId())
                        {
                        case R.id.delete_image:
                                deleteImage();
                                Toast.makeText(MainActivity.this, "IMAGE DISCARD", Toast.LENGTH_SHORT).show();
                                onCreate(savedInstanceState);
                                mode.finish();
                                return true;
                        case R.id.share_image:
                                mShareActionProvider = (ShareActionProvider) item.getActionProvider();
                                mShareActionProvider.setShareIntent(createShareIntent());
                                mode.finish();
                                return true;
                        default:
                                return false;
                        }
                }
        };

come potete notare in onActionItemClicked, controllo quale tipo di item ho tappato nella actionBar e quindi svolgo le relative funzioni.

Il problema è che se tappo sull'icona della ShareActionProvider non fa niente nel senso che la funzione item.getItem nello switch non ritorna nulla e quindi quello switch non riconosce il fatto che sia stato cliccato quel determinato item.

Ho cercato un po' in internet e alcuni parlano di un bug, ma non posso cerdere che big G non lo abbia sistemato.

Qualcuno ha qualche idea?

Questo è l' xml del contextual menu:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
       
    <item
       android:id="@+id/delete_image"
       android:title="@string/Delete_Image"
       android:icon="@drawable/ic_trash">
    </item>
   
     <item
       android:id="@+id/share_image"
       android:title="@string/Share_Image"
       android:actionProviderClass="android.widget.ShareActionProvider">
     </item>  

</menu>

Offline piterpaolo

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia V
  • Play Store ID:
    Piterpaolo
  • Sistema operativo:
    Windows 7
Re:inviare messaggio tramite whattsapp
« Risposta #11 il: 20 Novembre 2014, 11:06:35 CET »
0
Mi riallaccio a questo post esponendo il seguente quesito:
Se volessi fare in modo che l'app predefinita per l'invio del messaggio sia WhatsApp?
E come passo i parametri relativi al numero del contatto con il relativo testo?
In pratica sto facendo un'app che periodicamente invia delle info, in questo caso tramite WhatsApp, in modo del tutto automatico e silente.
Chi mi aiuta ?
GRAZIE

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:inviare messaggio tramite whattsapp
« Risposta #12 il: 20 Novembre 2014, 14:40:09 CET »
0
non penso tu lo possa fare. Se whatsapp non apre API a sviluppatori, tu non ci puoi interagire. E' il concetto di sandbox su cui è basato android...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline piterpaolo

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia V
  • Play Store ID:
    Piterpaolo
  • Sistema operativo:
    Windows 7
Re:inviare messaggio tramite whattsapp
« Risposta #13 il: 21 Novembre 2014, 08:02:15 CET »
0
Ops!!!
Allora mi sa che dirotterò l'invio automatico solo via SMS.
Grazie ;-)