如何在Delphi中直接向指定联系人发送WhatsApp消息?
直接向指定联系人发送WhatsApp消息(Delphi FireMonkey)
要跳过联系人选择步骤直接发送内容给指定联系人,核心是利用WhatsApp的URI Scheme指定目标号码,同时调整Intent的配置。以下是修改后的完整代码及关键说明:
修改后的代码
procedure TForm1.Button1Click(Sender: TObject); var Intent : JIntent; Uri : Jnet_Uri; Uris : JArrayList; Path : String; ContactNumber: string; // 指定目标联系人号码 WhatsAppUri: Jnet_Uri; begin // 1. 配置目标联系人号码(必须带国际区号,无空格/特殊字符) ContactNumber := '+5511999998888'; // 替换为实际联系人号码 // 2. 保存图片到共享目录(保持原有逻辑) Path := System.IOUtils.TPath.GetSharedDocumentsPath + PathDelim; Image1.Bitmap.SaveToFile(Path+'1.png'); Image2.Bitmap.SaveToFile(Path+'2.png'); Image3.Bitmap.SaveToFile(Path+'3.png'); // 3. 初始化Uri列表 Uris := TJArrayList.Create; Uris.add(TJNet_Uri.JavaClass.parse(StringToJString(Path+'1.png'))); Uris.add(TJNet_Uri.JavaClass.parse(StringToJString(Path+'2.png'))); Uris.add(TJNet_Uri.JavaClass.parse(StringToJString(Path+'3.png'))); // 4. 构造WhatsApp指定联系人的Intent WhatsAppUri := TJNet_Uri.JavaClass.parse(StringToJString('https://api.whatsapp.com/send?phone=' + ContactNumber)); Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND_MULTIPLE); // 多文件发送用ACTION_SEND_MULTIPLE Intent.setPackage(StringToJString('com.whatsapp')); // 限定唤起WhatsApp Intent.setData(WhatsAppUri); // 指定目标联系人 Intent.setType(StringToJString('image/png')); // 匹配文件类型 Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('Texto de teste')); // 附带文本 Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, Uris); // 传递图片Uri列表 Intent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); // 授予文件读取权限 // 5. 启动Intent TAndroidHelper.Activity.startActivity(Intent); end;
关键注意事项
- 号码格式要求:必须使用带国际区号的纯数字格式,比如中国号码为
+86138xxxxxxx,不能包含空格、括号、横杠等特殊字符,否则无法识别联系人。 - 多文件发送:发送多个图片时,必须使用
ACTION_SEND_MULTIPLE而非ACTION_SEND,否则只能传递单个文件。 - 文件权限:确保图片存储在共享目录(如
GetSharedDocumentsPath),否则WhatsApp无法访问文件内容。 - 包名限定:
setPackage('com.whatsapp')确保系统只唤起WhatsApp,避免出现应用选择弹窗。
内容的提问来源于stack exchange,提问作者Valdir Sola
相关产品推荐
相关产品推荐

