如何从我的应用程序分享文本到WhatsApp?

54

我开发了一个可以共享文本的应用程序。除了 WhatsApp 之外,这个功能都运行良好。我该怎么做?有没有专门的 API 可以解决这个问题?


1
使用安卓的分享机制。我可以很好地通过WhatsApp分享文本。 - poke
9个回答

144

您可以使用意图来实现此操作。 无需使用Whatsapp API。

Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
whatsappIntent.setType("text/plain");
whatsappIntent.setPackage("com.whatsapp");
whatsappIntent.putExtra(Intent.EXTRA_TEXT, "The text you wanted to share");
try {
    activity.startActivity(whatsappIntent);
} catch (android.content.ActivityNotFoundException ex) {
    ToastHelper.MakeShortText("Whatsapp have not been installed.");
}

1
这是完美的代码。它对我有用,并且是的,标记答案保存不可能是完全错误的。这个答案应该被标记为正确答案。 - GS Nayma
4
我是一名Android开发者,我该如何将WhatsApp与我的应用集成? - Eido95
1
@Eido95 这对于带有包名 com.whatsapp.w4b 的 Whatsapp 商业应用程序是无效的。因为现在许多人开始使用 Whatsapp 商业应用程序。 - Rumit Patel

19

有两种与 WhatsApp 集成的方式:

  • 通过自定义 URL 方案

  • 通过 Android 的意图系统。

如果您有一个网站,并希望打开一个预填充消息的 WhatsApp 聊天,您可以使用我们的自定义 URL 方案来实现。打开 whatsapp://send?text= 后跟要发送的文本,将打开 WhatsApp,允许用户选择联系人,并将输入字段预先填充为指定的文本。

像 Android 上的大多数社交应用一样,WhatsApp 会监听分享媒体和文本的意图。只需创建一个分享文本的意图,例如,系统选择器将显示 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并绕过系统选择器,您可以在意图中使用setPackage来实现:

sendIntent.setPackage("com.whatsapp");

在调用 startActivity(sendIntent) 之前,简单地设置这个即可。

请参考下面的官方 WhatsApp 页面链接:https://www.whatsapp.com/faq/en/android/28000012

如果您想将一些文本分享给特定的 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();
 }

}

更多详情请参考以下链接 发送文本到特定联系人(WhatsApp)


欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户了解它的内容和原因,然后引用您链接的页面中最相关的部分,以防目标页面不可用。仅仅提供链接的答案可能会被删除。 - FelixSFD
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - EJoshuaS - Stand with Ukraine
1
修改了我的回答 @EJoshuaS - Jitendra Kumar. Balla

10
如果用户的设备上没有Whatsapp应用程序,则用户将收到ActivityNotFoundException
然后,您应该先引导用户下载该应用程序。
public void shareViaWhatsApp() {
        Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
        whatsappIntent.setType("text/plain");
        whatsappIntent.setPackage("com.whatsapp");
        whatsappIntent.putExtra(Intent.EXTRA_TEXT, "Application of social rating share with your friend");
        try {
            Objects.requireNonNull(getActivity()).startActivity(whatsappIntent);
        } catch (android.content.ActivityNotFoundException ex) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.whatsapp")));
        }
    }

6
Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("text/plain");
    share.putExtra(Intent.EXTRA_TEXT, "Your text");
    startActivity(Intent.createChooser(share, "Share using"));

4
请给你的回答加上一些解释。在 SO 上,仅有代码的回答是不被鼓励的。谢谢。 - Gennadii Saprykin

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


1

我认为这个页面已经从WhatsApp网站中删除了。 - E-housma Mardini

0
 message = "this msg is sent from My App Time Track"
            val intent = Intent()//Empty as we don't know the destination i.e implicit intent
            intent.action = Intent.ACTION_SEND//intent will do work of sending something
            intent.putExtra(Intent.EXTRA_TEXT, message)//send given message
            intent.putExtra(Intent.EXTRA_SUBJECT,"Download Time Track App")//give the subject for your message
            //Intent.Extra_Text is actually a globol key
            intent.type = "plane/text"//type of intent

            startActivity(Intent.createChooser(intent,"Send to: "))//createChooser is a dialogBox which shows app available to send data

-9

WhatsApp目前没有公开的官方API,因此现在还不可能实现。(回答时间:2012年11月6日)


3
可以使用以下代码实现:Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.setPackage("com.whatsapp"); intent.putExtra(Intent.EXTRA_TEXT, "一些文本"); activity.startActivity(intent); - Muhammad Adil
2
如果您不知道,请不要发布答案! - Bhavik Mehta
46
Saqqib在2012年11月6日回答了这个问题。在给出负面评价和评论之前,请检查回答的日期和时间。 - jfalexvijay

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