以编程方式将文本发送到特定联系人(whatsapp)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式将文本发送到特定联系人(whatsapp)相关的知识,希望对你有一定的参考价值。

我想知道如何将文本发送到特定的WhatsApp联系人。我找到了一些代码来查看特定联系人,但不发送数据。

Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
    new String[]  ContactsContract.Contacts.Data._ID , ContactsContract.Data.DATA1 + "=?",
    new String[]  id , null);
c.moveToFirst();
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://com.android.contacts/data/" + c.getString(0)));

startActivity(i);
c.close();

这适用于查看whatsapp-contact,但我现在如何添加一些文本?或者Whatsapp开发人员没有实现这样的api?

答案

我认为答案是你的问题和这个答案的混合:https://stackoverflow.com/a/15931345/734687所以我会尝试以下代码:

  1. 将ACTION_VIEW更改为ACTION_SENDTO
  2. 像你一样设置Uri
  3. 将包设置为whatsapp
Intent i = new Intent(Intent.ACTION_SENDTO, 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);

我查看了Whatsapp清单,发现ACTION_SEND已注册到活动ContactPicker,所以这对你没有帮助。但是,ACTION_SENDTO已注册到活动com.whatsapp.Conversation,这听起来更适合您的问题。

Whatsapp可以作为发送短信的替代品,所以它应该像短信一样工作。如果您未指定所需的应用程序(通过q​​azxswpoi),Android将显示应用程序选择器。因此,您应该查看通过意图发送SMS的代码,然后提供其他包信息。

setPackage

首先尝试将Uri uri = Uri.parse("smsto:" + smsNumber); Intent i = new Intent(Intent.ACTION_SENDTO, uri); i.putExtra("sms_body", smsText); i.setPackage("com.whatsapp"); startActivity(i); 替换为ACTION_SEND。如果这不起作用,而不是提供额外的额外ACTION_SENDTO。如果这不起作用,请尝试更改uri。

更新我试图自己解决这个问题,但无法找到解决方案。 Whatsapp打开聊天记录,但不接收文本并发送。似乎这个功能没有实现。

另一答案

现在可以通过See also the documentation of WhatsApp实现。只有企业可以申请使用它。这是直接向电话号码发送消息的唯一方法,无需任何人为干预。

发送正常消息是免费的。看起来您需要在服务器上托管mysql数据库和WhatsApp Business Client。

另一答案

检查这个答案。这里你的号码以“91 **********”开头。

WhatsApp Business API
另一答案

试试这个,为我工作! 。只是使用意图

Intent sendIntent = new Intent("android.intent.action.MAIN");
sendIntent.setAction(Intent.ACTION_SEND);

sendIntent.setType("text/plain");                    
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");                   sendIntent.putExtra("jid",PhoneNumberUtils.stripSeparators("91**********")                   + "@s.whatsapp.net");                    
sendIntent.setPackage("com.whatsapp");                    
startActivity(sendIntent);

构建whatsapp网址。在whatsapp电话号码 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(whatsappUrl())); startActivity(intent); 中添加国家代码

https://countrycode.org/
另一答案

这将首先搜索指定的联系人,然后打开聊天窗口。

注意:phone_number和str是变量。

public static String whatsappUrl()

    final String BASE_URL = "https://api.whatsapp.com/";
    final String WHATSAPP_PHONE_NUMBER = "628123232323";    //'62' is country code for Indonesia
    final String PARAM_PHONE_NUMBER = "phone";
    final String PARAM_TEXT = "text";
    final String TEXT_VALUE = "Hello, How are you ?";

    String newUrl = BASE_URL + "send";

    Uri builtUri = Uri.parse(newUrl).buildUpon()
            .appendQueryParameter(PARAM_PHONE_NUMBER, WHATSAPP_PHONE_NUMBER)
            .appendQueryParameter(PARAM_TEXT, TEXT_VALUE)
            .build();

    return buildUrl(builtUri).toString();


public static URL buildUrl(Uri myUri)

    URL finalUrl = null;
    try 
        finalUrl = new URL(myUri.toString());
     catch (MalformedURLException e) 
        e.printStackTrace();

    
    return finalUrl;

另一答案
Uri mUri = Uri.parse("https://api.whatsapp.com/send?
phone=" + phone_no + "&text=" + str);
Intent mIntent = new Intent("android.intent.action.VIEW", mUri);
mIntent.setPackage("com.whatsapp");
startActivity(mIntent);
另一答案
 private void openWhatsApp() 
       //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("jid",whatsappId);
            sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            sendIntent.setPackage("com.whatsapp");
            startActivity(sendIntent);
         catch(Exception e) 
            Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
            Log.e("Error",e+"")    ;    
    
另一答案
Bitmap bmp = null;
            bmp = ((BitmapDrawable) tmpimg.getDrawable()).getBitmap();
            Uri bmpUri = null;
            try 
                File file = new File(getBaseContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".jpg");
                FileOutputStream out = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
                out.close();
                bmpUri = Uri.fromFile(file);

             catch (IOException e) 
                e.printStackTrace();
            

            String toNumber = "+919999999999"; 
            toNumber = toNumber.replace("+", "").replace(" ", "");
            Intent shareIntent =new Intent("android.intent.action.MAIN");
            shareIntent.setAction(Intent.ACTION_SEND);
            String ExtraText;
            ExtraText =  "Share Text";
            shareIntent.putExtra(Intent.EXTRA_TEXT, ExtraText);
            shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
            shareIntent.setType("image/jpg");
            shareIntent.setPackage("com.whatsapp");
            shareIntent.putExtra("jid", toNumber + "@s.whatsapp.net");
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            try 

                startActivity(shareIntent);
             catch (android.content.ActivityNotFoundException ex) 
                Toast.makeText(getBaseContext(), "Sharing tools have not been installed.", Toast.LENGTH_SHORT).show();
            

        
另一答案

private void sendToContactUs() 
     String phoneNo="+918000874386";

    Intent sendIntent = new Intent("android.intent.action.MAIN");
    sendIntent.setAction(Intent.ACTION_VIEW);
    sendIntent.setPackage("com.whatsapp");
    String url = "https://api.whatsapp.com/send?phone=" + phoneNo + "&text=" + "Unique Code - "+CommonUtils.getMacAddress();
    sendIntent.setDataAndType(Uri.parse(url),"text/plain");


    if(sendIntent.resolveActivity(getPackageManager()) != null)
        startActivity(sendIntent);
    else
        Toast.makeText(getApplicationContext(),"Please Install Whatsapp Massnger App in your Devices",Toast.LENGTH_LONG).show();
    

另一答案
 public void shareWhatsup(String text) 


        String smsNumber = "91+" + "9879098469"; // E164 format without '+' sign

        Intent intent = new Intent(Intent.ACTION_VIEW);

        try 
            String url = "https://api.whatsapp.com/send?phone=" + smsNumber + "&text=" + URLEncoder.encode(text, "UTF-8");
            intent.setPackage("com.whatsapp");
            intent.setData(Uri.parse(url));
         catch (Exception e) 
            e.printStackTrace();
        


以上是关于以编程方式将文本发送到特定联系人(whatsapp)的主要内容,如果未能解决你的问题,请参考以下文章

将 Whatsapp 消息发送到特定的联系号码(Swift 项目)

如何从我的 Android 应用程序通过 WhatsApp 向特定联系人发送消息?

怎样将微信的内容转发到whatsapp上

WhatsApp 视频作为 Gif 以编程方式在 Android 上共享

如何使用离子3中的特定联系人从其他应用程序打开Whatsapp应用程序?

在 iphone 中以编程方式发送短信