Intereting Posts
Прозрачная навигация без отображения макета под панелью состояния Как добавить заголовок, фрагмент и значок в ClusterItem? Android Как разместить несколько намерений в IntentService Android: использование линейного градиента в качестве фонового изображения Android «Разрешение отказа: невозможно использовать камеру» «Исключение: ошибка при создании экземпляра t! Первичная розетка уже зарегистрирована ». В приложении cordova angular2 Android: Дублировать ошибки класса в proguard Возможно ли создать диалоговое окно listview внутри? Существуют ли библиотеки, похожие на проект Three20 для Android? Когда списки быстро прокручиваются, setOnScrollListener не работает Цвет разделителя инвертора Android Вставить разделитель между view-pager Как получать многоадресные пакеты на Android Как идентифицировать кнопку, нажатую из динамически созданной таблицы Совместное использование GPS в режиме реального времени

Отправить текст для конкретного контакта (whatsapp)

Я хотел знать, как я могу отправить текст конкретному контакту whatsapp. Я нашел код для просмотра определенного контакта, но не для отправки данных.

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?", new String[] { id }, null); c.moveToFirst(); Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0))); startActivity(i); c.close(); 

Это отлично подходит для просмотра whatsapp-контакта, но как я могу добавить текст сейчас? Или разработчик Whatsapp не реализовал такой тип api?

Я думаю, что ответ представляет собой сочетание вашего вопроса и ответа на этот вопрос: https://stackoverflow.com/a/15931345/734687 Итак, я бы попробовал следующий код:

  1. Измените ACTION_VIEW на ACTION_SENDTO
  2. Установить Ури, как вы это делали
  3. Установить пакет в whatsapp
 Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse("content://com.android.contacts/data/" + c.getString(0))); i.setType("text/plain"); i.setPackage("com.whatsapp"); // so that only Whatsapp reacts and not the chooser i.putExtra(Intent.EXTRA_SUBJECT, "Subject"); i.putExtra(Intent.EXTRA_TEXT, "I'm the body."); startActivity(i); 

Я просмотрел манифест Whatsapp и увидел, что ACTION_SEND зарегистрирован в ContactPicker , так что это вам не поможет. Однако ACTION_SENDTO зарегистрирован в com.whatsapp.Conversation который звучит более адекватно для вашей проблемы.

Whatsapp может работать как замена для отправки SMS, поэтому он должен работать как SMS. Когда вы не укажете нужное приложение (через setPackage ), Android отобразит приложение. Тебе нужно просто взглянуть на код для отправки SMS с помощью намерения, а затем предоставить дополнительную информацию о пакете.

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

Сначала попробуйте заменить намерение ACTION_SEND на ACTION_SENDTO . Если это не сработает, чем предоставить дополнительный дополнительный sms_body . Если это не работает, попробуйте изменить uri.

Обновление Я попытался решить это сам и не смог найти решение. Whatsapp открывает историю чата, но не принимает текст и отправляет его. Кажется, что эта функциональность просто не реализована.

Я сделал это!

 private void openWhatsApp() { String smsNumber = "7****"; //without '+' try { Intent sendIntent = new Intent("android.intent.action.MAIN"); //sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation")); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); } catch(Exception e) { Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show(); } } 

Проверьте мой ответ: https://stackoverflow.com/a/40285262/5879376

  Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setComponent(new ComponentName("com.whatsapp","com.whatsapp.Conversation")); sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators("YOUR_PHONE_NUMBER")+"@s.whatsapp.net");//phone number without "+" prefix startActivity(sendIntent); 

Он позволяет открыть экран сеанса WhatsApp для конкретного пользователя, с которым вы пытаетесь установить связь:

 private void openWhatsApp() { String smsNumber = "91XXXXXXXX20"; boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp"); if (isWhatsappInstalled) { Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.Conversation")); sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators(smsNumber) + "@s.whatsapp.net");//phone number without "+" prefix startActivity(sendIntent); } else { Uri uri = Uri.parse("market://details?id=com.whatsapp"); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show(); startActivity(goToMarket); } } private boolean whatsappInstalledOrNot(String uri) { PackageManager pm = getPackageManager(); boolean app_installed = false; try { pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES); app_installed = true; } catch (PackageManager.NameNotFoundException e) { app_installed = false; } return app_installed; } 

Большой взлом Rishabh, спасибо большое, я искал это решение с последних 3 лет.

В соответствии с ответом Rishabh Maurya выше, я внедрил этот код, который отлично работает как для обмена текстами, так и изображений на WhatsApp.

Обратите внимание, что в обоих случаях он открывает разговор whatsapp (если toNumber существует в списке контактов whosapp users), но пользователь должен нажать кнопку отправки, чтобы завершить действие. Это означает, что это помогает пропустить шаг выбора контакта.

Для текстовых сообщений

 String toNumber = "+91 98765 43210"; // contains spaces. toNumber = toNumber.replace("+", "").replace(" ", ""); Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT, message); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setPackage("com.whatsapp"); sendIntent.setType("text/plain"); startActivity(sendIntent); 

Для обмена изображениями

 String toNumber = "+91 98765 43210"; // contains spaces. toNumber = toNumber.replace("+", "").replace(" ", ""); Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile)); sendIntent.putExtra("jid", toNumber + "@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT, message); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setPackage("com.whatsapp"); sendIntent.setType("image/png"); context.startActivity(sendIntent); 

Наслаждайтесь WhatsApping!

Я нашел правильный способ сделать это и просто прост, прочитав эту статью: http://howdygeeks.com/send-whatsapp-message-unsaved-number-android/

Телефон и сообщение являются строками.

Исходный код:

  PackageManager packageManager = context.getPackageManager(); Intent i = new Intent(Intent.ACTION_VIEW); try { String url = "https://api.whatsapp.com/send?phone="+ phone +"&text=" + URLEncoder.encode(message, "UTF-8"); i.setPackage("com.whatsapp"); i.setData(Uri.parse(url)); if (i.resolveActivity(packageManager) != null) { context.startActivity(i); } } catch (Exception e){ e.printStackTrace(); } 

Наслаждайтесь!

Проверьте этот ответ. Здесь ваш номер начинается с «91 **********».

 Intent sendIntent = new Intent("android.intent.action.MAIN"); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.putExtra("jid",PhoneNumberUtils.stripSeparators("91**********") + "@s.whatsapp.net"); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); 

Попробуй это, сработал для меня! , Просто используйте намерение

  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(whatsappUrl())); startActivity(intent); 

Создайте URL-адрес whatsapp. Добавить код страны в номер телефона whatsapp https://countrycode.org/

 public static String whatsappUrl(){ final String BASE_URL = "https://api.whatsapp.com/"; final String WHATSAPP_PHONE_NUMBER = "628123232323"; //'62' is country code for Indonesia final String PARAM_PHONE_NUMBER = "phone"; final String PARAM_TEXT = "text"; final String TEXT_VALUE = "Hello, How are you ?"; String newUrl = BASE_URL + "send"; Uri builtUri = Uri.parse(newUrl).buildUpon() .appendQueryParameter(PARAM_PHONE_NUMBER, WHATSAPP_PHONE_NUMBER) .appendQueryParameter(PARAM_TEXT, TEXT_VALUE) .build(); return buildUrl(builtUri).toString(); } public static URL buildUrl(Uri myUri){ URL finalUrl = null; try { finalUrl = new URL(myUri.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } return finalUrl; }