user3140417
user3140417

Reputation: 83

Android Intent to call Whatsapp from code

I am using this code to call WhatsApp directly from my Call Logs app. This works well, but only if the phone number includes a valid country code. For example calling WhatsApp with 919789006685 works but calling it with 97890 06685 does not work. Here 91 is the country code.

Since my app reads phone numbers from Call Logs, I should be able to invoke WhatsApp with any valid contact phone number, irrespective of the stored phone number format. It is possible that users store numbers in their contacts which do not include country codes. So is there a workaround for this issue?

Code used within my app:

Intent sendIntent = new Intent("android.intent.action.MAIN");
sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation"));
String waNumber = contactPhone.replace("+", "");
sendIntent.putExtra("jid", waNumber + "@s.whatsapp.net");
startActivity(sendIntent);

Upvotes: 1

Views: 9488

Answers (3)

Roni Castro
Roni Castro

Reputation: 2134

WhatsApp for an specific phone number

val whatsAppIntent = Intent(Intent.ACTION_VIEW)
val encodedText = URLEncoder.encode("Helo World", "UTF-8")
whatsAppIntent.data = Uri.parse("http://api.whatsapp.com/send?phone=$phoneNumber&text=$encodedText")

Upvotes: 0

user3140417
user3140417

Reputation: 83

Here is the complete solution. May be useful for people who are trying the same from their apps. Thanks to Sourav Ganguly for the link.

android-make whatsapp call

  1. Retreive the ID for the selected Contact.
  2. Get all the RAW Contact Id's for the contact id from ContactsContract.RawContacts
  3. Query the ContactsContract.Data table for all Raw Contacts and retrieve the column ContactsContract.Data._ID
  4. Since a contact may have several phone numbers active on WhatsApp, you may want to check additionally the column ContactsContract.Data.DATA3 to filter out the phone number you want to match
  5. To start a WhatsApp conversation use vnd.android.cursor.item/vnd.com.whatsapp.profile and vnd.android.cursor.item/vnd.com.whatsapp.voip.call if you want to start a WhatsApp call
  6. Use the ID from step 3 to start WhatsApp. Here is sample code:

    String data = "content://com.android.contacts/data/" + dataId;
                String type = "vnd.android.cursor.item/vnd.com.whatsapp.profile";
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_VIEW);
                sendIntent.setDataAndType(Uri.parse(data), type);
                sendIntent.setPackage("com.whatsapp");
    startActivity(sendIntent);
    

Upvotes: 4

PRATEEK BHARDWAJ
PRATEEK BHARDWAJ

Reputation: 2432

  Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.setType("text/html");
        sharingIntent.setPackage("com.whatsapp");
        sharingIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml("<p>https://play.google.com/store/apps/details?id=" + context.getPackageName() + "</p>"));
        context.startActivity(Intent.createChooser(sharingIntent, "Share using"));

Upvotes: 0

Related Questions