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

.NET MAUI中如何将图片与文本一同分享至外部应用?

解决方案:同时分享图片+文本到Telegram/Instagram(Android & iOS)

由于跨平台的IShare接口本身仅支持单一类型分享,要实现图文同时分享,需要直接调用Android和iOS的原生API来实现。

Android 实现步骤

  1. 配置FileProvider(Android 7.0+ 必需)
    在AndroidManifest.xml中添加FileProvider配置,避免文件Uri权限问题:

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
    

    然后在res/xml目录下创建file_paths.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-files-path name="my_images" path="Pictures" />
    </paths>
    
  2. 编写原生分享代码
    创建一个方法来构建包含文本和图片的分享Intent:

    public void ShareImageWithText(string imagePath, string text)
    {
        var context = Android.App.Application.Context;
        var file = new Java.IO.File(imagePath);
        var uri = FileProvider.GetUriForFile(context, context.PackageName + ".fileprovider", file);
    
        var intent = new Intent(Intent.ActionSend);
        intent.SetType("image/*");
        intent.PutExtra(Intent.ExtraText, text);
        intent.PutExtra(Intent.ExtraStream, uri);
        intent.AddFlags(ActivityFlags.GrantReadUriPermission);
    
        var chooser = Intent.CreateChooser(intent, "分享到");
        chooser.AddFlags(ActivityFlags.NewTask);
        context.StartActivity(chooser);
    }
    

iOS 实现步骤

直接使用UIActivityViewController来同时传递文本和图片:

public void ShareImageWithText(string imagePath, string text)
{
   var image = UIImage.FromFile(imagePath);
   var activityItems = new NSObject[] { new NSString(text), image };
   var activityController = new UIActivityViewController(activityItems, null);

   // 适配iPad(可选)
   if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
   {
       activityController.PopoverPresentationController.SourceView = UIApplication.SharedApplication.KeyWindow.RootViewController.View;
   }

   UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(activityController, true, null);
}

跨平台项目集成(如MAUI/Xamarin)

通过依赖服务的方式,在共享项目中定义接口,然后在Android/iOS项目中实现上述代码,在业务逻辑中调用原生实现即可。

注意事项

  • Telegram:原生分享Intent会自动识别文本和图片,发送时会将文本作为图片的说明。
  • Instagram:仅支持分享图片+标题(文本会作为图片标题),部分版本可能需要确保图片格式为JPG/PNG且符合尺寸要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:50:10