通过WhatsApp发送消息

Die*_*ego 99 android sharing social-networking android-intent whatsapp

由于我发现了一些较旧的帖子,告诉whatsapp不支持这个,我想知道是否有什么改变了,是否有办法打开一个whatsapp'聊天'与我通过意图发送的号码?

Man*_*rma 166

更新 请参阅https://faq.whatsapp.com/en/android/26000030/?category=5245251

WhatsApp的点击聊天功能允许您开始与某人聊天,而无需将电话号码保存在手机的地址簿中.只要您知道此人的电话号码,您就可以创建一个链接,以便与他们开始聊天.

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

}
Run Code Online (Sandbox Code Playgroud)

另见http://www.whatsapp.com/faq/en/android/28000012

  • 如果我们已经有联系信息,可以添加联系信息并发送消息,而无需触摸联系人选择并单击确定发送? (31认同)
  • @MananMerevikSharma来源不说谎(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/Intent.java).此外,基本的Java原则:对象一直存在,直到不再有任何对它们的引用. (4认同)

use*_*782 58

使用此代码,您可以使用给定的号码打开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, ""));
}
Run Code Online (Sandbox Code Playgroud)

  • 只有当您的聊天列表或联系人列表中包含该号码时,它才有效. (8认同)
  • @ user2957782我跟着这个先生,但当我点击我的按钮启动我的whatsapp时,它说"没有应用程序可以执行此操作" (3认同)

Die*_*ego 25

我找到了以下解决方案,首先你需要whatsapp id:

我在这里和其他论坛中与其他一些主题的报告相匹配,我找到的登录名是某种形式:国际区号不含0或+开头+电话号码没有第一个0 + @ s.whatsapp.net

例如,如果您居住在荷兰并且电话号码为0612325032,那么荷兰没有0或+的电话号码为31612325023@s.whatsapp.net - > +31,而没有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);
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 在`if(whatsapp!= null)`中没有任何意义,就像你上面的2行`Intent whatsapp = new Intent(...)`. (4认同)
  • @Eman87迭戈正在使用Action Bar Sherlock,所以方法.获取活动范围代替getSherlockActivity(). (2认同)
  • 如果联系人中存在此人,则可以直接打开聊天窗口.有没有办法对我们的联系人中不存在的新号码做同样的事情? (2认同)

Sat*_*esh 14

无论是否安装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;
}
Run Code Online (Sandbox Code Playgroud)

  • 即使安装了whatsapp,Activity也不是Fount exeption (11认同)
  • 找不到处理Intent的活动{act = android.intent.action.SENDTO typ = text/plain pkg = com.whatsapp(has extras)} (2认同)
  • 您需要删除此行才能使用sendIntent.setType("text/plain"); (2认同)
  • 删除sendIntent.setType("text/plain")会处理未被抛出的Activity Not Found,但现在文本未添加为消息 (2认同)

Ily*_*man 10

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); 
Run Code Online (Sandbox Code Playgroud)

这将打开与一个人的直接聊天,如果未安装whatsup这将抛出异常,如果电话号码不知道whatsup他们将提供通过短信或简单的短信发送邀请


Lat*_*war 8

试试这个,这段代码通过Intent.ACTION_VIEW启动WhatsApp,不要忘记使用国家代码到电话号码.

String phoneNumberWithCountryCode = "+62820000000";
String message = "Hallo";

startActivity(new Intent(Intent.ACTION_VIEW,
                  Uri.parse(
                            String.format("https://api.whatsapp.com/send?phone=%s&text=%s",
                                    phoneNumberWithCountryCode, message))));
Run Code Online (Sandbox Code Playgroud)


Chi*_*awa 8

这是通过 发送消息的最新方法Whatsapp,即使收件人的电话号码不在您的Whatsapp聊天或电话Contacts列表中也是如此。

private fun openWhatsApp(number: String) {
    try {
        packageManager.getPackageInfo("com.whatsapp", PackageManager.GET_ACTIVITIES)
        val intent = Intent(
            Intent.ACTION_VIEW,
            Uri.parse("https://wa.me/$number?text=I'm%20interested%20in%20your%20car%20for%20sale")
        )
        intent.setPackage("com.whatsapp")
        startActivity(intent)
    } catch (e: PackageManager.NameNotFoundException) {
        Toast.makeText(
            this,
            "Whatsapp app not installed in your phone",
            Toast.LENGTH_SHORT
        ).show()
        e.printStackTrace()
    }
}
Run Code Online (Sandbox Code Playgroud)

intent.setPackage("com.whatsapp")将帮助您避免使用选择器打开并Whatsapp直接打开。

重要提示:如果您以语句结尾catch,即使Whatsapp已安装。请添加queries如下manifest.xml

<queries>
   <package android:name="com.whatsapp" />
</queries>
Run Code Online (Sandbox Code Playgroud)

请参阅此答案以了解更多详细信息。


mil*_*dia 7

使用此单行代码通过 WhatsApp 发送消息

//NOTE : please use with country code first 2digits without plus signed
try {
      String mobile = "911234567890";
      String msg = "Its Working";
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://api.whatsapp.com/send?phone=" + mobile + "&text=" + msg)));
      }catch (Exception e){
        //whatsapp app not install
     }
Run Code Online (Sandbox Code Playgroud)