Envoyer du texte à un contact spécifique par programmation (whatsapp)

Je voulais savoir comment envoyer du texte à un contact WhatsApp spécifique. J’ai trouvé du code pour voir un contact spécifique, mais pas pour envoyer des données.

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, new Ssortingng[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?", new Ssortingng[] { id }, null); c.moveToFirst(); Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getSsortingng(0))); startActivity(i); c.close(); 

Cela fonctionne bien pour visualiser un contact WhatsApp, mais comment puis-je append du texte maintenant? Ou le développeur de Whatsapp n’a-t-il pas implémenté un tel api?

Je pense que la réponse est un mélange de votre question et de cette réponse ici: https://stackoverflow.com/a/15931345/734687 Donc, je voudrais essayer le code suivant:

  1. changez ACTION_VIEW en ACTION_SENDTO
  2. définir l’Uri comme vous l’avez fait
  3. définir le paquet à WhatsApp
 Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse("content://com.android.contacts/data/" + c.getSsortingng(0))); i.setType("text/plain"); i.setPackage("com.whatsapp"); // so that only Whatsapp reacts and not the chooser i.putExtra(Intent.EXTRA_SUBJECT, "Subject"); i.putExtra(Intent.EXTRA_TEXT, "I'm the body."); startActivity(i); 

J’ai regardé dans le manifeste de Whatsapp et j’ai vu que ACTION_SEND est enregistré dans l’activité ContactPicker , ce qui ne vous aidera pas. Cependant ACTION_SENDTO est inscrit à l’activité com.whatsapp.Conversation qui sonne mieux pour votre problème.

WhatsApp peut remplacer l’envoi de SMS, il devrait donc fonctionner comme un SMS. Lorsque vous ne spécifiez pas l’application souhaitée (via setPackage ), Android affiche le sélecteur d’application. Thererfor, vous devriez juste regarder le code pour envoyer des SMS via l’intention, puis fournir les informations supplémentaires sur le paquet.

 Uri uri = Uri.parse("smsto:" + smsNumber); Intent i = new Intent(Intent.ACTION_SENDTO, uri); i.putExtra("sms_body", smsText); i.setPackage("com.whatsapp"); startActivity(i); 

Essayez d’abord de remplacer l’intention ACTION_SEND par ACTION_SENDTO . Si cela ne fonctionne pas, fournissez le sms_body supplémentaire. Si cela ne fonctionne pas, essayez de changer l’URI.

Mise à jour J’ai essayé de résoudre ce problème moi-même et je n’ai pas pu trouver de solution. WhatsApp ouvre l’historique de discussion, mais ne prend pas le texte et l’envoie. Il semble que cette fonctionnalité ne soit pas implémentée.

Je l’ai fait!

 private void openWhatsApp() { Ssortingng smsNumber = "7****"; // E164 format without '+' sign Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix sendIntent.setPackage("com.whatsapp"); if (intent.resolveActivity(getActivity().getPackageManager()) == null) { Toast.makeText(this, "Error/n" + e.toSsortingng(), Toast.LENGTH_SHORT).show(); return; } startActivity(sendIntent); } 

J’ai trouvé la bonne façon de le faire et c’est simple après avoir lu cet article: http://howdygeeks.com/send-whatsapp-message-unsaved-number-android/

Le téléphone et le message sont tous deux Ssortingng.

Code source:

  PackageManager packageManager = context.getPackageManager(); Intent i = new Intent(Intent.ACTION_VIEW); try { Ssortingng url = "https://api.whatsapp.com/send?phone="+ phone +"&text=" + URLEncoder.encode(message, "UTF-8"); i.setPackage("com.whatsapp"); i.setData(Uri.parse(url)); if (i.resolveActivity(packageManager) != null) { context.startActivity(i); } } catch (Exception e){ e.printStackTrace(); } 

Prendre plaisir!

Cette approche fonctionne également avec l’application WhatsApp Business!

Modifier le nom du package en tant que sendIntent.setPackage (“com.whatsapp.w4b”); pour WhatsApp Business.

Super piratage Rishabh, merci beaucoup, je cherchais cette solution depuis 3 ans.

Conformément à la réponse de Rishabh Maurya ci-dessus, j’ai implémenté ce code qui fonctionne bien pour le partage de textes et d’images sur WhatsApp.

Notez que dans les deux cas, il ouvre une conversation WhatsApp (si toNumber existe dans la liste de contacts utilisateurs WhatsApp), mais l’utilisateur doit cliquer sur le bouton Envoyer pour terminer l’action. Cela signifie qu’il aide à sauter l’étape de sélection des contacts.

Pour les messages texte

 Ssortingng toNumber = "+91 98765 43210"; // contains spaces. toNumber = toNumber.replace("+", "").replace(" ", ""); Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT, message); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setPackage("com.whatsapp"); sendIntent.setType("text/plain"); startActivity(sendIntent); 

Pour partager des images

 Ssortingng toNumber = "+91 98765 43210"; // contains spaces. toNumber = toNumber.replace("+", "").replace(" ", ""); Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile)); sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT, message); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setPackage("com.whatsapp"); sendIntent.setType("image/png"); context.startActivity(sendIntent); 

Profitez de WhatsApping!

Découvrez ma réponse: https://stackoverflow.com/a/40285262/5879376

  Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setComponent(new ComponentName("com.whatsapp","com.whatsapp.Conversation")); sendIntent.putExtra("jid", PhoneNumberUtils.ssortingpSeparators("YOUR_PHONE_NUMBER")+"@s.whatsapp.net");//phone number without "+" prefix startActivity(sendIntent); 

Il vous permet d’ouvrir l’écran de conversation WhatsApp pour l’utilisateur spécifique avec lequel vous essayez de communiquer:

 private void openWhatsApp() { Ssortingng smsNumber = "91XXXXXXXX20"; boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp"); if (isWhatsappInstalled) { Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation")); sendIntent.putExtra("jid", PhoneNumberUtils.ssortingpSeparators(smsNumber) + "@s.whatsapp.net");//phone number without "+" prefix startActivity(sendIntent); } else { Uri uri = Uri.parse("market://details?id=com.whatsapp"); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show(); startActivity(goToMarket); } } private boolean whatsappInstalledOrNot(Ssortingng uri) { PackageManager pm = getPackageManager(); boolean app_installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed; } 

Cela va d’abord rechercher le contact spécifié, puis ouvrir une fenêtre de discussion. Et si WhatsApp n’est pas installé, essayez de bloquer ce bloc.

  Ssortingng digits = "\\d+"; Sring mob_num = 987654321; if (mob_num.matches(digits)) { try { /linking for whatsapp Uri uri = Uri.parse("whatsapp://send?phone=+91" + mob_num); Intent i = new Intent(Intent.ACTION_VIEW, uri); startActivity(i); } catch (ActivityNotFoundException e){ e.printStackTrace(); Toast.makeText(this, "WhatsApp not installed.", Toast.LENGTH_SHORT).show(); } } 

WhatsApp nouvelle fonctionnalité est arrivée essayer ces

  Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setAction(Intent.ACTION_VIEW); sendIntent.setPackage("com.whatsapp"); Ssortingng url = "https://api.whatsapp.com/send?phone=" + "Phone with international format" + "&text=" + "your message"; sendIntent.setData(Uri.parse(url)); startActivity(sendIntent); 

Crédits

Voir cette documentation

Essayez ceci, a travaillé pour moi! . Utilisez simplement l’intention

  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(whatsappUrl())); startActivity(intent); 

Construisez l’URL de WhatsApp. append le code du pays dans le numéro de téléphone de WhatsApp https://countrycode.org/

 public static Ssortingng whatsappUrl(){ final Ssortingng BASE_URL = "https://api.whatsapp.com/"; final Ssortingng WHATSAPP_PHONE_NUMBER = "628123232323"; //'62' is country code for Indonesia final Ssortingng PARAM_PHONE_NUMBER = "phone"; final Ssortingng PARAM_TEXT = "text"; final Ssortingng TEXT_VALUE = "Hello, How are you ?"; Ssortingng newUrl = BASE_URL + "send"; Uri builtUri = Uri.parse(newUrl).buildUpon() .appendQueryParameter(PARAM_PHONE_NUMBER, WHATSAPP_PHONE_NUMBER) .appendQueryParameter(PARAM_TEXT, TEXT_VALUE) .build(); return buildUrl(builtUri).toSsortingng(); } public static URL buildUrl(Uri myUri){ URL finalUrl = null; try { finalUrl = new URL(myUri.toSsortingng()); } catch (MalformedURLException e) { e.printStackTrace(); } return finalUrl; } 

Ceci est maintenant possible grâce à l’ API WhatsApp Business . Seules les entresockets peuvent demander à l’utiliser. C’est le seul moyen d’envoyer directement des messages à des numéros de téléphone, sans aucune interaction humaine.

L’envoi de messages normaux est gratuit. Il semble que vous deviez héberger une firebase database MySQL et le client WhatsApp Business sur votre serveur.

Cochez cette réponse. Ici, votre numéro commence par “91 **********”.

 Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.putExtra("jid",PhoneNumberUtils.ssortingpSeparators("91**********") + "@s.whatsapp.net"); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); 

Cela va d’abord rechercher le contact spécifié, puis ouvrir une fenêtre de discussion.

Note: phone_number et str sont des variables.

 Uri mUri = Uri.parse("https://api.whatsapp.com/send? phone=" + phone_no + "&text=" + str); Intent mIntent = new Intent("android.intent.action.VIEW", mUri); mIntent.setPackage("com.whatsapp"); startActivity(mIntent); 
  private void openWhatsApp() { //without '+' try { Intent sendIntent = new Intent("android.intent.action.MAIN"); //sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation")); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra("jid",whatsappId); sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); } catch(Exception e) { Toast.makeText(this, "Error/n" + e.toSsortingng(), Toast.LENGTH_SHORT).show(); Log.e("Error",e+"") ; } } 

C’est le chemin le plus court

  Ssortingng mPhoneNumber = "+972505555555"; mPhoneNumber = mPhoneNumber.replaceAll("+", "").replaceAll(" ", "").replaceAll("-",""); Ssortingng mMessage = "Hello world"; Ssortingng mSendToWhatsApp = "https://wa.me/" + mPhoneNumber + "?text="+mMessage; startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( mSendToWhatsApp ))); 

Voir aussi la documentation de WhatsApp

  Ssortingng toNumber = "+92307 8401217"; // contains spaces. toNumber = toNumber.replace("+", "").replace(" ", ""); Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT, "message"); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setPackage("com.whatsapp"); sendIntent.setType("text/plain"); startActivity(sendIntent); 
 Bitmap bmp = null; bmp = ((BitmapDrawable) tmpimg.getDrawable()).getBitmap(); Uri bmpUri = null; try { File file = new File(getBaseContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".jpg"); FileOutputStream out = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.PNG, 90, out); out.close(); bmpUri = Uri.fromFile(file); } catch (IOException e) { e.printStackTrace(); } Ssortingng toNumber = "+919999999999"; toNumber = toNumber.replace("+", "").replace(" ", ""); Intent shareIntent =new Intent("android.intent.action.MAIN"); shareIntent.setAction(Intent.ACTION_SEND); Ssortingng ExtraText; ExtraText = "Share Text"; shareIntent.putExtra(Intent.EXTRA_TEXT, ExtraText); shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); shareIntent.setType("image/jpg"); shareIntent.setPackage("com.whatsapp"); shareIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); try { startActivity(shareIntent); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getBaseContext(), "Sharing tools have not been installed.", Toast.LENGTH_SHORT).show(); } }