Enviando mensaje a través de WhatsApp

Como encontré algunas publicaciones más antiguas, que dicen que WhatsApp no ​​es compatible con esto, me preguntaba si algo había cambiado y si hay una forma de abrir una ‘conversación’ de whatsapp con un número que estoy enviando con un bash.

ACTUALIZACIÓN Consulte https://faq.whatsapp.com/es/android/26000030/?category=5245251

La función Click to Chat de WhatsApp le permite comenzar a chatear con alguien sin tener su número de teléfono guardado en la libreta de direcciones de su teléfono. Siempre que conozca el número de teléfono de esta persona, puede crear un enlace que le permita iniciar un chat con ellos.

Uso: https://api.whatsapp.com/send?phone=15551234567

No utilizar: https://api.whatsapp.com/send?phone=+001-(555)1234567

Ejemplo: https://api.whatsapp.com/send?phone=15551234567&text=I m% 20interested% 20in% 20your% 20car% 20for% 20sale

Respuesta original Aquí está la solución

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

También vea http://www.whatsapp.com/faq/es/android/28000012

Con este código puedes abrir el chat de whatsapp con el número indicado.

 void openWhatsappContact(String number) { Uri uri = Uri.parse("smsto:" + number); Intent i = new Intent(Intent.ACTION_SENDTO, uri); i.setPackage("com.whatsapp"); startActivity(Intent.createChooser(i, "")); } 

Encontré la siguiente solución, primero necesitarás la id de WhatsApp:

Coincidiendo con los informes de algunos otros hilos aquí y en otros foros, el nombre de inicio de sesión que encontré fue una especie de: código de área internacional sin los 0 o + en el principio + número de teléfono sin los primeros 0 + @ s.whatsapp.net

Por ejemplo, si usted vive en los Países Bajos y tiene el número de teléfono 0612325032 sería 31612325023@s.whatsapp.net -> +31 para los Países Bajos sin los 0 o + y el número de teléfono sin el 0.

 public void sendWhatsAppMessageTo(String whatsappid) { Cursor c = getSherlockActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Contacts.Data._ID }, ContactsContract.Data.DATA1 + "=?", new String[] { whatsappid }, null); c.moveToFirst(); Intent whatsapp = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0))); c.close(); if (whatsapp != null) { startActivity(whatsapp); } else { Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT) .show(); //download for example after dialog Uri uri = Uri.parse("market://details?id=com.whatsapp"); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); } } 

Esto debería funcionar ya sea que Whatsapp esté instalado o no.

 boolean isWhatsappInstalled = whatsappInstalledOrNot("com.whatsapp"); if (isWhatsappInstalled) { Uri uri = Uri.parse("smsto:" + "98*********7") Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri); sendIntent.putExtra(Intent.EXTRA_TEXT, "Hai Good Morning"); sendIntent.setType("text/plain"); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); } else { Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT).show(); Uri uri = Uri.parse("market://details?id=com.whatsapp"); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); 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; } 

¡Probado en Marshmallow S5 y funciona!

  Uri uri = Uri.parse("smsto:" + "phone number with country code"); Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri); sendIntent.setPackage("com.whatsapp"); startActivity(sendIntent); 

Esto abrirá un chat directo con una persona, si no está instalado, esto arrojará una excepción , si el número de teléfono no se conoce, se ofrecerán para enviar invitaciones a través de sms o mensajes de SMS simples.

Intente esto, este código inicie WhatsApp a través de Intent.ACTION_VIEW, no se olvide de usar el código de país en el número de teléfono.

 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( "https://api.whatsapp.com/send?phone=+628119xxx&text=I'm%20interested%20in%20your%20car%20for%20sale" ))); 

Esto me funciona:

 PackageManager pm = context.getPackageManager(); try { pm.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES); Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, ri.activityInfo.name)); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, element); } catch (NameNotFoundException e) { ToastHelper.MakeShortText("Whatsapp have not been installed."); } 

El siguiente código es utilizado por la aplicación Google Now y NO funcionará para ninguna otra aplicación.

Escribo esta publicación porque me enoja que WhatsApp no ​​permita que otros desarrolladores envíen mensajes directamente, excepto Google.

Y quiero que otros desarrolladores independientes sepan que está en curso este tipo de cooperación, mientras que Google sigue hablando de “abierto para cualquiera” y WhatsApp dice que no quieren proporcionar ningún acceso a los desarrolladores.

Recientemente, WhatsApp agregó un Intento especialmente para Google Now, que debería verse como sigue:

 Intent intent = new Intent("com.google.android.voicesearch.SEND_MESSAGE_TO_CONTACTS"); intent.setPackage("com.whatsapp"); intent.setComponent(new ComponentName("com.whatsapp", "com.whatsapp.VoiceMessagingActivity")); intent.putExtra("com.google.android.voicesearch.extra.RECIPIENT_CONTACT_CHAT_ID", number); intent.putExtra("android.intent.extra.TEXT", text); intent.putExtra("search_action_token", ?????); 

También podría descubrir que “search_action_token” es un PendingIntent que contiene un IBinder-Object, que se envía de vuelta a Google App y se marca, si fue creado por Google Now.

De lo contrario, WhatsApp no ​​aceptará el mensaje.

Actualmente, la única API oficial a la que puede hacer una solicitud GET :

 https://api.whatsapp.com/send?phone=919773207706&text=Hello 

De todos modos, hay un progtwig API secreto que WhatsApp ya está ejecutando

Esto me funciona:

 public static void shareWhatsApp(Activity appActivity, String texto) { Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto); PackageManager pm = appActivity.getApplicationContext().getPackageManager(); final List matches = pm.queryIntentActivities(sendIntent, 0); boolean temWhatsApp = false; for (final ResolveInfo info : matches) { if (info.activityInfo.packageName.startsWith("com.whatsapp")) { final ComponentName name = new ComponentName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name); sendIntent.addCategory(Intent.CATEGORY_LAUNCHER); sendIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_NEW_TASK); sendIntent.setComponent(name); temWhatsApp = true; break; } } if(temWhatsApp) { //abre whatsapp appActivity.startActivity(sendIntent); } else { //alerta - você deve ter o whatsapp instalado Toast.makeText(appActivity, appActivity.getString(R.string.share_whatsapp), Toast.LENGTH_SHORT).show(); } } 

esto es muy largo pero desagradable. disfruta tu código 🙂

  //method used to show IMs private void show_custom_chooser(String value) { List list = null; final Intent email = new Intent(Intent.ACTION_SEND); email.setData(Uri.parse("sms:")); email.putExtra(Intent.EXTRA_TEXT, "" + value); email.setType("text/plain"); // vnd.android-dir/mms-sms WindowManager.LayoutParams WMLP = dialogCustomChooser.getWindow() .getAttributes(); WMLP.gravity = Gravity.CENTER; dialogCustomChooser.getWindow().setAttributes(WMLP); dialogCustomChooser.getWindow().setBackgroundDrawable( new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialogCustomChooser.setCanceledOnTouchOutside(true); dialogCustomChooser.setContentView(R.layout.about_dialog); dialogCustomChooser.setCancelable(true); ListView lvOfIms = (ListView) dialogCustomChooser .findViewById(R.id.listView1); PackageManager pm = getPackageManager(); List launchables = pm.queryIntentActivities(email, 0); // ////////////new list = new ArrayList(); for (int i = 0; i < launchables.size(); i++) { String string = launchables.get(i).toString(); Log.d("heh", string); //check only messangers if (string.contains("whatsapp")) { list.add(launchables.get(i)); } } Collections.sort(list, new ResolveInfo.DisplayNameComparator(pm)); int size = launchables.size(); adapter = new AppAdapter(pm, list, MainActivity.this); lvOfIms.setAdapter(adapter); lvOfIms.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { ResolveInfo launchable = adapter.getItem(position); ActivityInfo activity = launchable.activityInfo; ComponentName name = new ComponentName( activity.applicationInfo.packageName, activity.name); email.addCategory(Intent.CATEGORY_LAUNCHER); email.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); email.setComponent(name); startActivity(email); dialogCustomChooser.dismiss(); } }); dialogCustomChooser.show(); } 

Estoy llegando tarde pero creo que hoy en día tenemos soluciones más cortas y mejores para enviar mensajes a través de WhatsApp.

Puede usar lo siguiente para llamar al selector de sistema, luego elija la aplicación que usará para compartir lo que desee.

 Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent); 

Si realmente necesita enviar a través de WhatsApp, todo lo que necesita hacer es lo siguiente (se saltará el selector del sistema)

  Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); // Put this line here sendIntent.setPackage("com.whatsapp"); // startActivity(sendIntent); 

Si necesita más información, puede encontrarla aquí: Preguntas frecuentes sobre WhatsApp

Verifique este código,

  public void share(String subject,String text) { final Intent intent = new Intent(Intent.ACTION_SEND); String score=1000; intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, score); intent.putExtra(Intent.EXTRA_TEXT, text); startActivity(Intent.createChooser(intent, getString(R.string.share))); } 

obtener el número de contacto a quien desea enviar el mensaje y crear uri para whatsapp, aquí c es un Cursor que devuelve el contacto seleccionado.

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

Como dice la documentación , puedes usar una URL como:

https://wa.me/15551234567

Donde el último segmento es el número en formato E164

 Uri uri = Uri.parse("https://wa.me/15551234567"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);