Так как я нашел несколько старых сообщений, которые говорят, что whatsapp не поддерживает это, мне было интересно, изменилось ли что-то и если есть способ открыть чат WhatsApp с номером, который я отправляю через намерение?
Отправка сообщения через WhatsApp
Ответ 1
ОБНОВЛЕНИЕ Пожалуйста, обратитесь к https://faq.whatsapp.com/ru/android/26000030/?category=5245251
Функция WhatsApp Click to Chat позволяет начать чат с кем-то, не сохранив номер своего телефона в адресной книге вашего телефона. Пока вы знаете этот номер телефона людей, вы можете создать ссылку, которая позволит вам начать с ними чат.
Использование: https://api.whatsapp.com/send?phone=15551234567
Не использовать: https://api.whatsapp.com/send?phone=+001-(555)1234567
Пример: https://api.whatsapp.com/send?phone=15551234567&text=I 'm %20interested %20in %20your %20car %20for %20sale
Оригинальный ответ Вот решение
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();
}
}
Ответ 2
С помощью этого кода вы можете открыть чат whatsapp с заданным номером.
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, ""));
}
Ответ 3
Я нашел следующее решение: сначала вам понадобится идентификатор whatsapp:
Совместившись с отчетами из некоторых других потоков здесь и на других форумах, имя входа, которое я нашел, было своего рода: код международной зоны без 0 или + в начале + номер телефона без первого 0 + @s.whatsapp.net
Например, если вы живете в Нидерландах и имеете номер телефона 0612325032, это будет [email protected] → +31 для Нидерландов без 0 или + и номер телефона без 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);
}
}
Ответ 4
Это должно работать независимо от того, установлен ли Whatsapp или нет.
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;
}
Ответ 5
Протестировано на Marshmallow S5, и оно работает!
Uri uri = Uri.parse("smsto:" + "phone number with country code");
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
sendIntent.setPackage("com.whatsapp");
startActivity(sendIntent);
Это откроет чат прямой с человеком, если это не установлено, будет исключение исключения, если номер телефона неизвестен whatsup они будут предлагать отправить приглашение через sms или просто сообщение sms
Ответ 6
Попробуйте это, этот запуск кода WhatsApp через Intent.ACTION_VIEW, не забудьте указать код страны на номер телефона.
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse(
"https://api.whatsapp.com/send?phone=+628119xxx&text=I'm%20interested%20in%20your%20car%20for%20sale"
)));
Ответ 7
Это работает для меня:
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.");
}
Ответ 8
Следующий код используется приложением Google Now и НЕ будет работать для любого другого приложения.
Я пишу этот пост, потому что меня злит, что WhatsApp не позволяет другим разработчикам отправлять сообщения напрямую, кроме Google.
И я хочу, чтобы другие независимые разработчики знали, что такое сотрудничество продолжается, в то время как Google продолжает говорить о "открытых для кого-то", и WhatsApp говорит, что они не хотят предоставлять никакого доступа к разработчикам.
Недавно WhatsApp добавил намерение специально для Google Now, которое должно выглядеть следующим образом:
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", ?????);
Я также мог узнать, что "search_action_token" - это PendingIntent который содержит объект IBinder-Object, который отправляется обратно в приложение Google и проверяется, если он был создан Google Now.
В противном случае WhatsApp не примет сообщение.
Ответ 9
В настоящее время, единственный официальный API, который вы можете сделать GET
запрос:
https://api.whatsapp.com/send?phone=919773207706&text=Hello
В любом случае, есть секретная программа API, уже запущенная WhatsApp
Ответ 10
Это работает для меня:
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<ResolveInfo> 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();
}
}
Ответ 11
это много продолжительная, но угрюмая работа. наслаждайтесь своим кодом:)
//method used to show IMs
private void show_custom_chooser(String value) {
List<ResolveInfo> 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<ResolveInfo> launchables = pm.queryIntentActivities(email, 0);
// ////////////new
list = new ArrayList<ResolveInfo>();
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();
}
Ответ 12
Мне очень поздно, но я считаю, что в наши дни у нас есть более короткие и лучшие решения для отправки сообщений через WhatsApp.
Вы можете использовать следующее для вызова системного сборщика, затем выберите, какое приложение вы будете использовать, чтобы поделиться тем, что хотите.
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);
Если вам действительно нужно отправить через WhatsApp все, что вам нужно сделать, это следующее (вы пропустите сборщик системы)
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);
Если вам нужна дополнительная информация, вы можете найти его здесь: Часто задаваемые вопросы WhatsApp
Ответ 13
Проверьте этот код,
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)));
}
Ответ 14
получить контактный номер, которому вы хотите отправить сообщение, и создать uri для whatsapp, здесь c является курсором, возвращающим выбранный контакт.
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);
Ответ 15
Как говорится в документации, вы можете просто использовать URL-адрес:
https://wa.me/15551234567
Где последний сегмент - это число в формате E164
Uri uri = Uri.parse("https://wa.me/15551234567");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);