You enter the phone number to TextView and click on the button. It finds a user with this number and makes a video call using whatsapp with no user intervention.
The code can be changed to support VoIP calls also. Then the mimetype should show
"vnd.android.cursor.item/vnd.com.whatsapp.voip.call"
package com.example.whatsappcall; import android.Manifest; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); askPermissions(); Button clickButton = findViewById(R.id.button); clickButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if ( checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED ) { askPermissions(); } else { EditText eText = findViewById(R.id.editText); // I am not checking correctness of number Long _ID = getContactIdUsingNumber(eText.getText().toString(), v.getContext()); if (_ID != null) { videoCall(_ID); } else { Toast.makeText(v.getContext(), "Number not found or can't accept video call!!!", Toast.LENGTH_LONG).show(); } } } }); } // Get required permissions public void askPermissions() { // Ask permissions ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.CALL_PHONE}, 1); } /* * Finds out if the given phone number has a whatsapp video call _ID */ public Long getContactIdUsingNumber(String phoneNumber, Context context) { // Search contact using phone number Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(uri, null, null, null, null); // Store ID of the contact we are searching long contactId = 0L; if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); contactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.PhoneLookup.CONTACT_ID)); } else return null; // Make array of 1 element String[] selectionArgs = {Long.toString(contactId)}; // Select clause to search for contact I String selectionClause = ContactsContract.Data.CONTACT_ID + " = ? "; Long _ID = null; cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, selectionClause, selectionArgs, null); // Cursor can't be null but anyway... if (cursor != null) while (cursor.moveToNext()) { String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)); if (mimeType.equals("vnd.android.cursor.item/vnd.com.whatsapp.video.call")) { _ID = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID)); } } else return null; cursor.close(); return _ID; } public void videoCall(Long _ID) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); String data = "content://com.android.contacts/data/" + Long.toString(_ID); String type = "vnd.android.cursor.item/vnd.com.whatsapp.video.call"; intent.setDataAndType(Uri.parse(data), type); intent.setPackage("com.whatsapp"); startActivity(intent); } }