Java 安卓打whatsapp电话
我想给特定用户打一个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
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%尝试此操作,你会得到准确的结果。这太复杂了,你能为此制作一个视频吗?请下次检查你的格式。你的帖子质量很低,而且存在缩进问题。这个解决方案对我不适用。即使没有异常/错误发生。看来这个意图被忽略了。不起作用吗?但是有很多人投票?