Send text to specific contact programmatically (whatsapp)
I've found the right way to do this:
Source code: phone
and message
are both String
.
PackageManager packageManager = context.getPackageManager(); Intent i = new Intent(Intent.ACTION_VIEW); try { String 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(); }
Enjoy yourself!
I think the answer is a mix of your question and this answer here: https://stackoverflow.com/a/15931345/734687So I would try the following code:
- change ACTION_VIEW to ACTION_SENDTO
- set the Uri as you did
- set the package to whatsapp
Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));i.setType("text/plain");i.setPackage("com.whatsapp"); // so that only Whatsapp reacts and not the chooseri.putExtra(Intent.EXTRA_SUBJECT, "Subject");i.putExtra(Intent.EXTRA_TEXT, "I'm the body.");startActivity(i);
I looked into the Whatsapp manifest and saw that ACTION_SEND is registered to the activity ContactPicker
, so that will not help you. However ACTION_SENDTO is registered to the activity com.whatsapp.Conversation
which sounds more adequate for your problem.
Whatsapp can work as a replacement for sending SMS, so it should work like SMS. When you do not specify the desired application (via setPackage
) Android displays the application picker. Thererfor you should just look at the code for sending SMS via intent and then provide the additional package information.
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);
First try just to replace the intent ACTION_SEND
to ACTION_SENDTO
. If this does not work than provide the additional extra sms_body
. If this does not work than try to change the uri.
UpdateI tried to solve this myself and was not able to find a solution. Whatsapp is opening the chat history, but doesn't take the text and send it. It seems that this functionality is just not implemented.
I have done it!
private void openWhatsApp() { String 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.toString(), Toast.LENGTH_SHORT).show(); return; } startActivity(sendIntent);}