Откройте диалог в Whatsapp и заполните текст.

Я хочу открыть WhatsApp для конкретной беседы и заполнить текстовое поле некоторой строкой.

Код, который у меня есть, и мне удалось открыть разговор с контактом:

 private void openConversationWithWhatsapp(String e164PhoneNumber){ String whatsappId = e164PhoneNumber+"@s.whatsapp.net"; Uri uri = Uri.parse("smsto:" + whatsappId); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.setPackage("com.whatsapp"); intent.putExtra(Intent.EXTRA_TEXT, "text"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_TITLE, "title"); intent.putExtra(Intent.EXTRA_EMAIL, "email"); intent.putExtra("sms_body", "The text goes here"); intent.putExtra("text","asd"); intent.putExtra("body","body"); intent.putExtra("subject","subjhect"); startActivity(intent); } 

Однако текстовое поле не заполнено содержимым. Я попытался заглянуть в файл AndroidManifest.xml и нашел следующую информацию об их активности:

 <activity android:theme="@style/Theme.App.CondensedActionBar" android:name="com.whatsapp.Conversation" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> </intent-filter> </activity> 

Кто-нибудь знает, что нужно использовать? Они специально блокируют это? Я видел API для iOS, который у них есть на странице часто задаваемых вопросов .

К сожалению, они не реализовали эту функцию на андроиде (возможно, в будущем).

Я уже задал подобный вопрос , но никаких результатов. Хотя whatsapp реагирует на некоторые намерения, подобные тем, которые вы показываете в своем коде, они просто не используют отправленный вами текст. Я полагаю, что это из-за соображений безопасности, представьте себе количество приложений whatsapp-spammer в игровом магазине … Я не знаю, как (и почему) он реализован в iOS …

Две альтернативы, которые приближаются к вашему решению,

  1. Отправьте текст и создайте выборщик (не нужно вводить, просто выберите whatsapp)
  2. Откройте контакт (текст нужно ввести, но не нужно выбирать контакт)

Я сделал это!

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

Вы можете использовать следующий фрагмент для WhatsApp:

 public void onClickWhatsApp(View view) { PackageManager pm=getPackageManager(); try { Intent waIntent = new Intent(Intent.ACTION_SEND); waIntent.setType("text/plain"); String text = "YOUR TEXT HERE"; PackageInfo info=pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA); //Check if package exists or not. If not then code //in catch block will be called waIntent.setPackage("com.whatsapp"); waIntent.putExtra(Intent.EXTRA_TEXT, text); startActivity(Intent.createChooser(waIntent, "Share with")); } catch (NameNotFoundException e) { Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT) .show(); } } 

Попробуйте использовать следующее решение для отправки изображения и текста.

Вы можете установитьType как «текст» и удалить extra_stream, чтобы использовать его только для отправки текста.

  Intent sendIntent = new Intent("android.intent.action.SEND"); File f=new File("path to the file"); Uri uri = Uri.fromFile(f); sendIntent.setComponent(new ComponentName("com.whatsapp","com.whatsapp.ContactPicker")); sendIntent.setType("image"); sendIntent.putExtra(Intent.EXTRA_STREAM,uri); sendIntent.putExtra("jid", PhoneNumberUtils.stripSeparators("919xxxxxxxxx")+"@s.whatsapp.net"); sendIntent.putExtra(Intent.EXTRA_TEXT,"sample text you want to send along with the image"); startActivity(sendIntent); 

Дополнительная информация о процессе получения решения:

После обратной инженерии WhatsApp я наткнулся на следующий фрагмент манифеста Android,

Normal Share, использует « SEND », который не позволяет вам отправлять конкретный контакт и требует выбора контакта.

Конкретный контакт подбирается классом «Разговор» и использует действие « SEND_TO », но он использует тело sms и не может принимать изображения и другие вложения.

  <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.Conversation" android:theme="@style/Theme.App.CondensedActionBar" android:windowSoftInputMode="stateUnchanged"> <intent-filter> <action android:name="android.intent.action.SENDTO"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="sms"/> <data android:scheme="smsto"/> </intent-filter> </activity> 

Копаю дальше, я наткнулся на это,

  <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.whatsapp.ContactPicker" android:theme="@style/Theme.App.NoActionBar"> <intent-filter> <action android:name="android.intent.action.PICK"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="com.whatsapp"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="audio/*"/> <data android:mimeType="video/*"/> <data android:mimeType="image/*"/> <data android:mimeType="text/plain"/> <data android:mimeType="text/x-vcard"/> <data android:mimeType="application/pdf"/> <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document"/> <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation"/> <data android:mimeType="application/msword"/> <data android:mimeType="application/vnd.ms-excel"/> <data android:mimeType="application/vnd.ms-powerpoint"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="audio/*"/> <data android:mimeType="video/*"/> <data android:mimeType="image/*"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="send" android:scheme="whatsapp"/> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ContactChooserTargetService"/> </activity> 

Наконец, используя декомпилятор для класса ContactPicker и Conversation, дополнительное значение ключа для номера телефона оказалось « jid ».