Android:如何通过程序使用WhatsApp、微信发送信息?

25

如何在安卓应用中使用WhatsApp和WeChat消息功能?

实际需求是使用WhatsApp和WeChat(免费短信)发送短信。


1
请参考以下链接:http://developers.wechat.com/wechatapi。 - WISHY
@Shink 谢谢,我已经拿到了这个 SDK,实际上我需要一些关于如何以编程方式集成它的教程? - Subhalaxmi
要使用Whats和WeChat发送消息,您需要使用它们的API和身份验证。 - Ashfaque
@Mann 是的,我知道没有API.. 我想知道如何通过选择任何一种方式来编程地发送信息到WhatsApp和WeChat? - Subhalaxmi
@SubhalaxmiNayak:我遇到了这个错误:java.lang.RuntimeException: 无法启动活动ComponentInfo{com.akm.whatsapp/com.akm.whatsapp.WhatsActivity}:android.content.ActivityNotFoundException:找不到处理Intent {act=android.intent.action.SENDTO typ=text/plain pkg=com.whatsapp(有额外信息)}的活动......而且Whatsapp已经在我的设备上。 - Akarsh M
显示剩余2条评论
5个回答

33

我有解决方案了。在这里发布答案,希望能帮助其他可能有相同疑问的人。

要通过任何应用程序分享...

public void sendAppMsg(View view) {

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    String text = " message you want to share..";
    // change with required  application package  

    intent.setPackage("PACKAGE NAME OF THE APPLICATION");
    if (intent != null) {
        intent.putExtra(Intent.EXTRA_TEXT, text);//
        startActivity(Intent.createChooser(intent, text));
    } else {

        Toast.makeText(this, "App not found", Toast.LENGTH_SHORT)
                .show();
    }
}
注意:根据您的要求更改应用程序的*包名称,例如:

示例:使用

//Whatsapp
    intent.setPackage("com.whatsapp");`

//Linkedin
    intent.setPackage("com.linkedin.android");

//Twitter    
    intent.setPackage("com.twitter.android");

//Facebook
    intent.setPackage("com.facebook.katana");

//GooglePlus
    intent.setPackage("com.google.android.apps.plus");

对于微信,URI 是什么? - Anshuman Borah
2
@SubhalaxmiNayak 我尝试使用intent.setPackage("com.tencent.mm");它可以工作,但会打开一个带有“微信”和“微信收藏”两个选项的对话框。是否可能直接打开微信? - Anshuman Borah
是的,这个链接适用于微信腾讯,它们是同一个应用程序。请在应用商店中查看。 - Subhalaxmi
2
这只会打开 WhatsApp,如果你想直接发送给特定联系人而不是点击联系人怎么办? - naamadheya
如果我想与一个特定的联系人分享文件,而不需要点击联系人怎么办? - Alvin
显示剩余2条评论

15

要向任何WhatsApp用户发送直接消息,请使用以下代码:

private void sendMessageToWhatsAppContact(String number) {
    PackageManager packageManager = context.getPackageManager();
    Intent i = new Intent(Intent.ACTION_VIEW);
    try {
        String url = "https://api.whatsapp.com/send?phone=" + number + "&text=" + URLEncoder.encode(CommonStrings.SHARING_APP_MSG, "UTF-8");
        i.setPackage("com.whatsapp");
        i.setData(Uri.parse(url));
        if (i.resolveActivity(packageManager) != null) {
            context.startActivity(i);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1
我已经尝试过这段代码。它可以工作,但并不完全是“发送”它。它只是输入了文本,现在用户需要手动按下“发送”按钮。是否有可能直接发送而无需等待用户按下“发送”按钮? - Dante
我需要与您所要求的相同的功能,但没有找到直接发送它的方法。 - NehaK
2
我在另一篇帖子中针对类似的答案发表了相同的评论,他们回复说这是由于WhatsApp的安全问题而不允许它。我认为这很合理。想象一下某个未知的应用程序使用您的服务发送消息,而不需要用户干预。但是,如果我们可以模拟屏幕上的触摸事件,那么仍然可能是可能的。但是,可以直接使用通常的消息应用程序发送消息,而无需等待用户的批准。 - Dante
谷歌已经有效地从所有非默认短信应用程序中撤销了SEND_SMS权限。我错了吗,如果通过WhatsApp发送消息会是一个解决方法? - JAW
@NehaK 你好,你解决了这个问题吗?使用这段代码打开应用程序但没有直接发送。 - Venkatesh

15

这应该可以帮助你使用WhatsApp发送消息:

public void sendWhatsAppMsg() {

    Intent waIntent = new Intent(Intent.ACTION_SEND);
    waIntent.setType("text/plain");
            String text = "testing message";
    waIntent.setPackage("com.whatsapp");
    if (waIntent != null) {
        waIntent.putExtra(Intent.EXTRA_TEXT, text);//
        startActivity(Intent.createChooser(waIntent, text));
    } else {
        Toast.makeText(this, "WhatsApp not found", Toast.LENGTH_SHORT)
                .show();
    }

}

2
@CostaMirkin 没有太多想法。但是请查看这个这个 - MysticMagicϡ
3
有没有办法指定收件人? - ocross
最佳解决方案分享到WhatsApp。+1 - Hardik Joshi
当WhatsApp已安装时,它运行得很好,但是当它未安装时,屏幕会变暗,并显示“没有应用程序可以执行此操作”的消息,该消息位于屏幕中央,测试消息显示在屏幕顶部。 - primehalo
intent.putExtra(Intent.EXTRA_TEXT, text); 不再起作用了。请使用URL中的文本,例如:https://dev59.com/FGAf5IYBdhLWcg3wUBb4#46683818 - Guy4444
显示剩余3条评论

2
你可以尝试以下两种解决方案,它们对我有用。
参考资料:https://faq.whatsapp.com/en/android/26000030/?category=5245251
private void openWhatsApp(String countryCode, String mobile) {
    String customerPhoneNumber = String.format("%s%s", countryCode, mobile);
    Uri uri = Uri.parse("smsto:" + customerPhoneNumber);
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
    sendIntent.setPackage("com.whatsapp");

    if(sendIntent.resolveActivity(getPackageManager()) == null){
        showDialogMessage("you should install whatsapp.");
        return;
    }

    startActivity(sendIntent);
}

or

private void openWhatsApp(String countryCode, String mobile) {
    String customerPhoneNumber = String.format("%s%s", countryCode, mobile);
    Intent sendIntent = new Intent(Intent.ACTION_VIEW);
    sendIntent.setPackage("com.whatsapp");
// you can remove this part ("&text=" + "your message")
    String url = "https://api.whatsapp.com/send?phone=" + customerPhoneNumber + "&text=" + "your message"; 
    sendIntent.setData(Uri.parse(url));

    if(sendIntent.resolveActivity(getPackageManager()) == null){
        showDialogMessage("you should install whatsapp.");
        return;
    }

    startActivity(sendIntent);
}

好的回答!现在考虑添加一些为什么它有效的信息 :) - Gaurav Mall

0

这是我得到的最简单的例子

/**
 * sends message to the specific application
 * @param text The message that user wants to send
 * @param view is the activity view of the application
 */
public void sendMessage(String text, View view){
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setType("text/plain");
    intent.setPackage("com.example.appname");//For whatsapp you can use com.whatsapp
    if (intent !=null){
        intent.putExtra(Intent.EXTRA_TEXT, text);
        startActivity(intent);
    }else{
        Snackbar.make(this, "Application not found.", Snackbar.LENGTH_SHORT).show();
    }
}

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