通过WhatsApp发送消息

139

由于我发现一些较旧的帖子称whatsapp不支持此功能,因此我想知道是否有变化以及是否有办法通过意图打开一个whatsapp“聊天”,并将其中的号码发送出去?


你尝试过使用共享操作提供程序吗? - Basim Sherif
听起来很有趣,但这该怎么实现呢?我能分享一个字符串(电话号码),然后它会打开 WhatsApp(或选择器)吗?你能给一个小例子吗? - Diego
2
虽然WhatsApp中有ACTION_SENDTO意图,但它并未执行(正确),因此不可能针对特定的电话号码进行操作[这是我发现的]。 - Manan Sharma
2
可能是 将文本发送给特定联系人(WhatsApp) 的重复问题。 - Rishabh Maurya
我仍然期待能够同时附加图像和文本,但是没有找到成功的方法,唉 :( - gumuruh
26个回答

3

目前,您可以向唯一官方API发出GET请求:

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

无论如何,WhatsApp已经在运行一个秘密API程序了,详情请见


1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - Kumar Saurabh
1
@KumarSaurabh 这不是一个链接,它是一个GET请求。 - Zameer Ansari

3
根据文档,您可以使用以下URL:

https://wa.me/15551234567

其中最后一段是以E164格式表示的号码。

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

3
这是我的解决方案:
        Uri uri = Uri.parse("https://api.whatsapp.com/send?phone=" + "<number>" + "&text=" + "Hello WhatsApp!!");
        Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(sendIntent);

2
这对我有效:
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.");
}

2
您需要使用以下格式的URL...
https://api.whatsapp.com/send?text=text

然后您可以让它发送任何您想要的文本。您还可以选择指定电话号码...

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

您不能使用以下内容:

https://wa.me/send?text=text

您将会得到...

我们找不到您要查找的页面

然而,如果您提供了电话号码和文本,wa.me 将会起作用。但是,大多数情况下,如果您想要创建一个分享链接,您真的不想指定电话号码,因为您希望用户自己选择联系人。在这种情况下,如果您不提供号码并使用 wa.me 作为 URL,所有的分享链接都将失败。请使用 app.whatsapp.com


2

使用WhatsApp的直接URL

String url = "https://api.whatsapp.com/send?phone="+number;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

1
我很晚才来,但我相信现在我们有更短更好的解决方案通过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常见问题解答

1
这可能有些冗长,但肯定能起作用。 享受你的代码:)
 //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();

}

1

检查一下这段代码,

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

1
private fun sendWhatsappMessage(phoneNumber:String, text:String) {        
  val url = if (Intent().setPackage("com.whatsapp").resolveActivity(packageManager) != null) {
        "whatsapp://send?text=Hello&phone=$phoneNumber"
    } else {
        "https://api.whatsapp.com/send?phone=$phoneNumber&text=$text"
    }

    val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    startActivity(browserIntent)
}

这是一种更简单的实现方式。该代码检查设备上是否安装了WhatsApp。如果已安装,则绕过系统选择器,转到WhatsApp上的联系人,并预填聊天中的文本。如果未安装,则在您的Web浏览器中打开WhatsApp链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接