You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Xamarin实现通过WhatsApp向联系人号码发送图片

Xamarin实现通过WhatsApp向通讯录联系人发送图片的方案

前提说明

  • 需要先获取到通讯录中目标联系人的带国家码的完整手机号,WhatsApp仅支持完整格式的手机号识别,不支持短号或本地格式号码
  • 需要确认目标手机号已经注册了WhatsApp账号,否则调用后会提示用户邀请该联系人注册
  • 图片需要先存储到设备公共可读取区域,确保WhatsApp有权限访问资源

Android 平台实现

  1. 提前申请必要权限:READ_CONTACTS、Android 12及以下申请READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE,Android 13+申请READ_MEDIA_IMAGES
  2. 发图逻辑代码示例:
// 替换为目标联系人的完整带国家码手机号,不需要+号或空格,例如中国手机号138xxxx1234填写为86138xxxx1234
string targetPhone = "8613800138000";
// 替换为你的图片本地Uri
Android.Net.Uri imageUri = Android.Net.Uri.Parse("content://com.你的包名.fileprovider/图片路径/test.jpg");

Intent sendIntent = new Intent();
sendIntent.SetAction(Intent.ActionSend);
sendIntent.PutExtra(Intent.ExtraStream, imageUri);
sendIntent.SetType("image/*");
sendIntent.SetPackage("com.whatsapp");
sendIntent.PutExtra("jid", $"{targetPhone}@s.whatsapp.net");

if (sendIntent.ResolveActivity(PackageManager) != null)
{
    StartActivity(sendIntent);
}
else
{
    // 未安装WhatsApp的提示逻辑
}

Android 7.0及以上版本需要使用FileProvider生成content://格式的Uri提供给WhatsApp,不要直接使用file://格式的Uri,否则会触发权限错误。

iOS 平台实现

  1. 先在Info.plist中添加WhatsApp的Scheme白名单:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>whatsapp</string>
</array>
  1. 发图逻辑代码示例:
// 替换为目标联系人完整带国家码手机号,格式为带+号的完整号码
string targetPhone = "+8613800138000";
// 替换为你要发送的图片对象
UIImage sendImage = UIImage.FromFile("test.jpg");

// 先保存图片到相册确保WhatsApp可读取
UIImage.WriteToSavedPhotosAlbum(sendImage, (image, error, context) =>
{
    if (error == null)
    {
        var whatsappUrl = new NSUrl($"whatsapp://send?phone={targetPhone}");
        if (UIApplication.SharedApplication.CanOpenUrl(whatsappUrl))
        {
            var activityController = new UIActivityViewController(new NSObject[] { sendImage }, null);
            // 可按需排除不需要的分享渠道
            activityController.ExcludedActivityTypes = new NSString[] 
            { 
                UIActivityType.Message, UIActivityType.Mail, UIActivityType.AirDrop 
            };
            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(activityController, true, null);
        }
        else
        {
            // 未安装WhatsApp的提示逻辑
        }
    }
});

Xamarin.Forms 跨平台实现

可以通过依赖服务(DependencyService)封装上述两个平台的实现,统一调用接口:

  1. 共享项目中定义接口:
public interface IWhatsAppService
{
    Task<bool> SendImageToContact(string fullPhoneNumber, string imagePath);
}
  1. 分别在Android和iOS项目中实现该接口,注册依赖服务后即可在共享层直接调用。

注意事项

  • 所有涉及读取通讯录、访问存储、发送消息的操作都需要先获取用户授权,符合对应平台的隐私规范要求
  • WhatsApp的调用逻辑可能随着版本更新发生变化,如果出现调用失效需要对应调整参数

内容的提问来源于stack exchange,提问作者Buflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:51:02