Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Как сделать WhatsApp звонок из приложения Android

На просторах en-SO нашел ответ , в комментариях сказано что пример рабочий. Пробую сделать у себя в приложении тоже самое но при первой попытке как будто запускается WhatsApp и сразу же закрывается. При последующий попытках - вообще ничего не происходит, единственная реакция - это строка в логах:
V/WhatsApp: Total WhatsApp Contacts: 17
Я делаю это так:
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri = ContactUriHelper.getUriFromPhoneNumber(contact.getPhone().getNumber(), getApplicationContext()); intent.setDataAndType(Uri.parse("content://com.android.contacts/data/2021"), //Uri.parse("content://com.android.contacts/data/_id") "vnd.android.cursor.item/vnd.com.whatsapp.voip.call"); intent.setPackage("com.whatsapp"); startActivity(intent);
Uri пробовал и строкой передавать и самим обьектом uri - ничего не зименилось.
Uri я получаю следующим образом
public static Uri getUriFromPhoneNumber(String phoneNumber, Context context) { Uri uri = null; String contactId = getContactIdByPhoneNumber(phoneNumber, context); if (!TextUtils.isEmpty(contactId)) { Cursor cursor = context.getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[]{ContactsContract.Data._ID}, ContactsContract.Data.DATA2 + "=? AND " + ContactsContract.Data.CONTACT_ID + " = ?", new String[]{"Viber", contactId}, null); if (cursor != null) { Log.wtf(TAG, cursor.toString()); while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Data._ID)); if (!TextUtils.isEmpty(id)) { uri = Uri.parse(ContactsContract.Data.CONTENT_URI + "/" + id); Log.d(TAG, "URI: " + uri.toString()); break; } } cursor.close(); } } return uri; }
private static String getContactIdByPhoneNumber(String phoneNumber, Context context) { ContentResolver contentResolver = context.getContentResolver(); String contactId = null; Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
String[] projection = new String[]{ContactsContract.PhoneLookup._ID};
Cursor cursor = contentResolver.query( uri, projection, null, null, null);
if (cursor != null) { while (cursor.moveToNext()) { contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); } cursor.close(); } Log.wtf(TAG, "ContactID: " + contactId); return contactId; }
В чем может быть проблема?


Ответ

По ссылке говорят, что нужно отфильтровать записи по mimetype "vnd.android.cursor.item/vnd.com.whatsapp.voip.call" т.е.
public static Uri getUriFromPhoneNumber(String phoneNumber, Context context) { Uri uri = null; String contactId = getContactIdByPhoneNumber(phoneNumber, context); if (!TextUtils.isEmpty(contactId)) { Cursor cursor = context.getContentResolver().query( ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data._ID }, ContactsContract.Data.MIMETYPE + "=? AND " + ContactsContract.Data.CONTACT_ID + " = ?", new String[] { "vnd.android.cursor.item/vnd.com.whatsapp.voip.call", contactId }, null); if (cursor != null) { Log.wtf(TAG, cursor.toString()); while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Data._ID)); if (!TextUtils.isEmpty(id)) { uri = Uri.parse(ContactsContract.Data.CONTENT_URI + "/" + id); Log.d(TAG, "URI: " + uri.toString()); break; } } cursor.close(); } } return uri; }

Комментариев нет:

Отправить комментарий