Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓打whatsapp电话_Java_Android_Whatsapp - Fatal编程技术网

Java 安卓打whatsapp电话

Java 安卓打whatsapp电话,java,android,whatsapp,Java,Android,Whatsapp,我想给特定用户打一个WhatsApp电话。我试过这个,但不起作用: Uri uri = Uri.parse("callto:" + phoneNUmber); Intent i = new Intent(Intent.ACTION_CALL, uri); i.setPackage("com.whatsapp"); startActivity(i); 我知道如何创建WhatsApp消息,代码与之类似,它可以工作: Uri uri = Uri.parse("smsto:" + phoneNUmbe

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

Uri uri = Uri.parse("callto:" + phoneNUmber);
Intent i = new Intent(Intent.ACTION_CALL, uri);
i.setPackage("com.whatsapp");
startActivity(i);
我知道如何创建WhatsApp消息,代码与之类似,它可以工作:

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

简单的解决方案是,查询ContactContract.Data以获取_id和MIME类型

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 );

}
输出如下所示

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

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

现在只将MIME类型为
vnd.android.cursor.item/vnd.com.whatsapp.voip.call的ID保存在DB或其他地方

然后你用这种方式启动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);

要进行WhatsApp视频通话,请使用以下mime字符串:

String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.video.call";
 String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call";
要进行WhatsApp语音呼叫,请使用以下mime字符串:

String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.video.call";
 String mimeString = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call";
使用以下代码:

 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);
        }
    }
}

如果我们传递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;

}

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

如果你不知道,首先检查一下她的号码是否有whatsapp

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


请用相关的错误日志/调试信息更新您的问题。您是否将相关的
权限
添加到
清单
,请检查MIME类型是否正常工作。如何使用intent进行whatsApp视频呼叫,如viop呼叫。?如果我的联系人中没有号码怎么办?是否可以在不保存联系人的情况下进行whatsApp呼叫?@adnan khan此解决方案不适用于我。即使没有异常/错误发生。似乎这个意图被忽略了。伙计们按照下面的代码“检查号码是否有whatsApp”,对于“whatsApp呼叫”和“whatsApp视频呼叫”,请100%尝试此操作,你会得到准确的结果。这太复杂了,你能为此制作一个视频吗?请下次检查你的格式。你的帖子质量很低,而且存在缩进问题。这个解决方案对我不适用。即使没有异常/错误发生。看来这个意图被忽略了。不起作用吗?但是有很多人投票?