java android-make whatsapp 电话

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38655458/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 03:37:45  来源:igfitidea点击:

android-make whatsapp call

javaandroidwhatsapp

提问by israelbenh

I want to make a WhatsApp call to a specific user. I tried this and it doesn't work:

我想向特定用户拨打 WhatsApp 电话。我试过这个,但它不起作用:

Uri uri = Uri.parse("callto:" + phoneNUmber);
Intent i = new Intent(Intent.ACTION_CALL, uri);
i.setPackage("com.whatsapp");
startActivity(i);

I know how to create a WhatsApp message, the code is similar and it works:

我知道如何创建 WhatsApp 消息,代码类似并且有效:

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

回答by Adnan Khan

Simple solution is, Query ContactContract.Data for the _id and MIME type.

简单的解决方案是,为 _id 和 MIME 类型查询 ContactContract.Data。

ContentResolver resolver = context.getContentResolver();  
cursor = resolver.query(
            ContactsContract.Data.CONTENT_URI,
            null, null, null,
            ContactsContract.Contacts.DISPLAY_NAME);

//Now read data from cursor like 

while (cursor.moveToNext()) {
      long _id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID));
      String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
      String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));

      Log.d("Data", _id+ " "+ displayName + " " + mimeType );

}

The output will be like the following

输出将如下所示

12561 Snow vnd.android.cursor.item/vnd.com.whatsapp.profile

12562 Snow vnd.android.cursor.item/vnd.com.whatsapp.voip.call

12561雪vnd.android.cursor.item/vnd.com.whatsapp.profile

12562雪vnd.android.cursor.item/vnd.com.whatsapp.voip.call

Now save in DB or somewhere else only those _Ids whose MIME type is vnd.android.cursor.item/vnd.com.whatsapp.voip.call

现在只保存在数据库或其他地方的那些 MIME 类型为的 _Ids vnd.android.cursor.item/vnd.com.whatsapp.voip.call

And then you initiate Whatsapp call with those contacts like this way

然后你用这种方式与这些联系人发起 Whatsapp 通话

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

// the _ids you save goes here at the end of /data/12562     
intent.setDataAndType(Uri.parse("content://com.android.contacts/data/_id"),
    "vnd.android.cursor.item/vnd.com.whatsapp.voip.call");
intent.setPackage("com.whatsapp");

startActivity(intent);

回答by Zezariya Nilesh

To make WhatsApp video call use below mime-string:

要使 WhatsApp 视频通话使用下面的 mime-string:

String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.video.call";

To make WhatsApp voice call use below mime-string:

要使用以下 mime-string 进行 WhatsApp 语音通话:

 String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call";

Use Below Code:

使用以下代码:

 String displayName = null;
 String name="ABC" // here you can give static name.
 Long _id;
 ContentResolver resolver = getApplicationContext().getContentResolver();
 cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
 while (cursor.moveToNext()) {
    _id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID));
    displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
    String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
    if (displayName.equals(name)) {
        if (mimeType.equals(mimeString)) {
            String data = "content://com.android.contacts/data/" + _id;
            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_VIEW);
            sendIntent.setDataAndType(Uri.parse(data), mimeString);
            sendIntent.setPackage("com.whatsapp");
            startActivity(sendIntent);
        }
    }
}

回答by dileep krishnan

this code is to check number has whatsapp or not and make whatsapp audio and video call

此代码用于检查号码是否有whatsapp并进行whatsapp音频和视频通话

first check wether number have whatsapp or not ...if you dont know

首先检查号码是否有whatsapp ...如果你不知道

 if  rowContactId (return type of hasWhatsapp) is  not equal to '0'   then this number has whatsapp.

.

.

public String hasWhatsapp(  getContactIDFromNumber(795486179).toString(),MAinactivity.this ) 
{
        String rowContactId = null;
        boolean hasWhatsApp;

        String[] projection = new String[]{ContactsContract.RawContacts._ID};
        String selection = ContactsContract.Data.CONTACT_ID + " = ? AND account_type IN (?)";
        String[] selectionArgs = new String[]{contactID, "com.whatsapp"};
        Cursor cursor = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, selection, selectionArgs, null);
        if (cursor != null) {
            hasWhatsApp = cursor.moveToNext();
            if (hasWhatsApp) {
                rowContactId = cursor.getString(0);
            }
            cursor.close();
        }
        return rowContactId;
    }


public static int getContactIDFromNumber( contactNumber,Context context)
    {
        contactNumber = Uri.encode(contactNumber);
        int phoneContactID = new Random().nextInt();
        Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,contactNumber),new String[] {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);
        while(contactLookupCursor.moveToNext())
        {
            phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
        }
        contactLookupCursor.close();        

        return phoneContactID;
    }


//your number is support for whatsapp then come to here  to make whatsapp  call
// this is for whatsapp call
 wtsapp_call.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call";


                         Intent intent = new Intent();
                         intent.setAction(Intent.ACTION_VIEW);

                //here you have to pass whatsApp contact  number  as  contact_number ..

               String name= getContactName( contact_number, MainActivity.this);
                int whatsappcall=getContactIdForWhatsAppCall(name,MainActivity.this);
                if (whatsappcall!=0) {
                    intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" +whatsappcall),
                            "vnd.android.cursor.item/vnd.com.whatsapp.voip.call");
                    intent.setPackage("com.whatsapp");

                    startActivityForResult(intent, WHATSAPP_NUMMBER);
                }
            }
        });


//for whatsapp  video call
        wtsapp_video.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);

                       //here you have to pass whatsApp contact  number  as  number..

                        String name= getContactName( number, MainActivity.this);
                int videocall=getContactIdForWhatsAppVideoCall(name,MainActivity.this);
                if (videocall!=0)
                {
                    intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" +videocall),
                            "vnd.android.cursor.item/vnd.com.whatsapp.video.call");
                    intent.setPackage("com.whatsapp");
                    startActivity(intent);
                }

            }
        });

 public String getContactName(final String phoneNumber, Context context)
    {
        Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));

        String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME};

        String contactName="";
        Cursor cursor=context.getContentResolver().query(uri,projection,null,null,null);

        if (cursor != null) {
            if(cursor.moveToFirst()) {
                contactName=cursor.getString(0);
            }
            cursor.close();
        }

        return contactName;
    }


 public  int getContactIdForWhatsAppCall(String name,Context context)
    {

        cursor = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                ContactsContract.Data.DISPLAY_NAME + "=? and "+ContactsContract.Data.MIMETYPE+ "=?",
                new String[] {name,"vnd.android.cursor.item/vnd.com.whatsapp.voip.call"},
                ContactsContract.Contacts.DISPLAY_NAME);

        if (cursor.getCount()>0)
        {
            cursor.moveToNext();
            int phoneContactID=  cursor.getInt(cursor.getColumnIndex(ContactsContract.Data._ID));
            System.out.println("9999999999999999          name  "+name+"      id    "+phoneContactID);
            return phoneContactID;
        }
        else
        {
            System.out.println("8888888888888888888          ");
            return 0;
        }
    }

    public  int getContactIdForWhatsAppVideoCall(String name,Context context)
    {
      Cursor  cursor = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                ContactsContract.Data.DISPLAY_NAME + "=? and "+ContactsContract.Data.MIMETYPE+ "=?",
                new String[] {name,"vnd.android.cursor.item/vnd.com.whatsapp.video.call"},
                ContactsContract.Contacts.DISPLAY_NAME);

        if (cursor.getCount()>0)
        {
            cursor.moveToFirst();
            int phoneContactID=  cursor.getInt(cursor.getColumnIndex(ContactsContract.Data._ID));
            return phoneContactID;
        }
        else
        {
            System.out.println("8888888888888888888          ");
            return 0;
        }
    }

回答by Vikas

If we pass rawContactId, then we can use that to directly fetch the ID associated with the whatsapp call URI.

如果我们传递 rawContactId,那么我们可以使用它来直接获取与 whatsapp 调用 URI 关联的 ID。

private void whatsAppCall(Context context, String rawContactId) {
        try {

            int id = whatsAppCallId(context, rawContactId);

            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            String uriString = "content://com.android.contacts/data/" + id;
            intent.setDataAndType(Uri.parse(uriString), "vnd.android.cursor.item/vnd.com.whatsapp.voip.call");
            intent.setPackage("com.whatsapp");
            startActivity(intent);
        } catch (Exception e) {
            Log.e(TAG, "whatsAppCall Exception: " + e);
        }
    }



 private long whatsAppCallId(Context context, String rawContactId){ 
    ContentResolver resolver = context.getContentResolver();

            String selection = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.Data.RAW_CONTACT_ID + " = ? ";
            String[] selectionArgs = new String[] { "vnd.android.cursor.item/vnd.com.whatsapp.voip.call", rawContactId };


            Cursor cursor = resolver.query(
                    ContactsContract.Data.CONTENT_URI,
                    null, selection, selectionArgs,
                    ContactsContract.Contacts.DISPLAY_NAME);
            long _id=0;

            while (cursor.moveToNext()) {
                _id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID));
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
                String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
                Log.d(TAG, "Data: " + _id+ " "+ displayName + " " + mimeType );
            }
return _id;

}

回答by dileep krishnan

// first  check wether  number have whatsapp   or  not  ...if you dont know

  //if  rowContactId (return type of hasWhatsapp) is  not equal to '0'   then this number has whatsapp..

public String hasWhatsapp(  getContactIDFromNumber(795486179).toString(),MAinactivity.this ) 
{
        String rowContactId = null;
        boolean hasWhatsApp;

        String[] projection = new String[]{ContactsContract.RawContacts._ID};
        String selection = ContactsContract.Data.CONTACT_ID + " = ? AND account_type IN (?)";
        String[] selectionArgs = new String[]{contactID, "com.whatsapp"};
        Cursor cursor = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, selection, selectionArgs, null);
        if (cursor != null) {
            hasWhatsApp = cursor.moveToNext();
            if (hasWhatsApp) {
                rowContactId = cursor.getString(0);
            }
            cursor.close();
        }
        return rowContactId;
    }


public static int getContactIDFromNumber( contactNumber,Context context)
    {
        contactNumber = Uri.encode(contactNumber);
        int phoneContactID = new Random().nextInt();
        Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,contactNumber),new String[] {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);
        while(contactLookupCursor.moveToNext())
        {
            phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
        }
        contactLookupCursor.close();        

        return phoneContactID;
    }


//your number is support for whatsapp then come to here  to make whatsapp  call
// this is for whatsapp call
 wtsapp_call.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call";


                         Intent intent = new Intent();
                         intent.setAction(Intent.ACTION_VIEW);

                //here you have to pass whatsApp contact  number  as  contact_number ..

               String name= getContactName( contact_number, MainActivity.this);
                int whatsappcall=getContactIdForWhatsAppCall(name,MainActivity.this);
                if (whatsappcall!=0) {
                    intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" +whatsappcall),
                            "vnd.android.cursor.item/vnd.com.whatsapp.voip.call");
                    intent.setPackage("com.whatsapp");

                    startActivityForResult(intent, WHATSAPP_NUMMBER);
                }
            }
        });


//for whatsapp  video call
        wtsapp_video.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);

                       //here you have to pass whatsApp contact  number  as  number..

                        String name= getContactName( number, MainActivity.this);
                int videocall=getContactIdForWhatsAppVideoCall(name,MainActivity.this);
                if (videocall!=0)
                {
                    intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" +videocall),
                            "vnd.android.cursor.item/vnd.com.whatsapp.video.call");
                    intent.setPackage("com.whatsapp");
                    startActivity(intent);
                }

            }
        });

 public String getContactName(final String phoneNumber, Context context)
    {
        Uri uri=Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber));

        String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME};

        String contactName="";
        Cursor cursor=context.getContentResolver().query(uri,projection,null,null,null);

        if (cursor != null) {
            if(cursor.moveToFirst()) {
                contactName=cursor.getString(0);
            }
            cursor.close();
        }

        return contactName;
    }


 public  int getContactIdForWhatsAppCall(String name,Context context)
    {

        cursor = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                ContactsContract.Data.DISPLAY_NAME + "=? and "+ContactsContract.Data.MIMETYPE+ "=?",
                new String[] {name,"vnd.android.cursor.item/vnd.com.whatsapp.voip.call"},
                ContactsContract.Contacts.DISPLAY_NAME);

        if (cursor.getCount()>0)
        {
            cursor.moveToNext();
            int phoneContactID=  cursor.getInt(cursor.getColumnIndex(ContactsContract.Data._ID));
            System.out.println("9999999999999999          name  "+name+"      id    "+phoneContactID);
            return phoneContactID;
        }
        else
        {
            System.out.println("8888888888888888888          ");
            return 0;
        }
    }

    public  int getContactIdForWhatsAppVideoCall(String name,Context context)
    {
      Cursor  cursor = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data._ID},
                ContactsContract.Data.DISPLAY_NAME + "=? and "+ContactsContract.Data.MIMETYPE+ "=?",
                new String[] {name,"vnd.android.cursor.item/vnd.com.whatsapp.video.call"},
                ContactsContract.Contacts.DISPLAY_NAME);

        if (cursor.getCount()>0)
        {
            cursor.moveToFirst();
            int phoneContactID=  cursor.getInt(cursor.getColumnIndex(ContactsContract.Data._ID));
            return phoneContactID;
        }
        else
        {
            System.out.println("8888888888888888888          ");
            return 0;
        }
    }