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

如何让.NET MAUI应用显示在设备的分享对话框中?

在.NET MAUI中让应用出现在分享对话框并接收URL

要让你的.NET MAUI应用出现在系统分享列表里,接收其他应用(比如浏览器、新闻APP)分享的URL,需要针对不同平台配置清单文件,再实现数据接收逻辑,具体步骤如下:

安卓平台配置

  1. 修改AndroidManifest.xml
    找到安卓项目里的Properties/AndroidManifest.xml,给主Activity添加一个intent-filter,声明应用能处理文本类型的分享:
    <activity android:name=".MainActivity">
        <!-- 保留原来的intent-filter(比如启动应用的那个) -->
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
    
  2. 获取分享的URL
    在MainActivity.cs里重写OnNewIntent方法,拿到分享过来的URL:
    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        if (intent.Action == Intent.ActionSend && intent.Type == "text/plain")
        {
            string sharedUrl = intent.GetStringExtra(Intent.ExtraText);
            // 把URL传到共享代码里处理,比如调用App里的方法
            if (!string.IsNullOrEmpty(sharedUrl))
            {
                App.Current.ReceivedSharedUrl(sharedUrl);
            }
        }
    }
    

iOS/macOS平台配置

  1. 修改Info.plist
    在iOS或macOS项目的Info.plist中,添加文档类型声明,让系统知道你的应用能接收URL和文本:
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>Shared URL</string>
            <key>LSHandlerRank</key>
            <string>Alternate</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.url</string>
                <string>public.text</string>
            </array>
        </dict>
    </array>
    
  2. 获取分享的URL
    在AppDelegate.cs里重写两个方法,分别处理不同方式的分享:
    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        string sharedUrl = url.AbsoluteString;
        App.Current.ReceivedSharedUrl(sharedUrl);
        return base.OpenUrl(app, url, options);
    }
    
    // 处理通过Universal Links或用户活动分享的情况
    public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
    {
        if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb)
        {
            string sharedUrl = userActivity.WebpageUrl.AbsoluteString;
            App.Current.ReceivedSharedUrl(sharedUrl);
        }
        return base.ContinueUserActivity(application, userActivity, completionHandler);
    }
    

Windows平台配置

  1. 修改Package.appxmanifest
    在Windows项目的Package.appxmanifest中,添加Share Target扩展,声明支持接收文本数据:
    <Extensions>
        <uap:Extension Category="windows.shareTarget">
            <uap:ShareTarget>
                <uap:SupportedDataFormats>
                    <uap:DataFormat>Text</uap:DataFormat>
                </uap:SupportedDataFormats>
            </uap:ShareTarget>
        </uap:Extension>
    </Extensions>
    
  2. 获取分享的URL
    在Windows项目的App.xaml.cs里重写OnLaunched方法,处理分享激活的情况:
    protected override async void OnLaunched(LaunchActivatedEventArgs args)
    {
        base.OnLaunched(args);
        if (args.Kind == ActivationKind.ShareTarget)
        {
            var shareOperation = args.ShareOperation;
            if (shareOperation.Data.Contains(StandardDataFormats.Text))
            {
                string sharedUrl = await shareOperation.Data.GetTextAsync();
                App.Current.ReceivedSharedUrl(sharedUrl);
            }
        }
    }
    

共享代码处理逻辑

在MAUI共享项目的App.xaml.cs里,添加一个方法来处理接收到的URL,比如弹框提示或者导航到对应页面:

public void ReceivedSharedUrl(string url)
{
    // 这里写你自己的处理逻辑,比如显示弹窗
    MainPage.DisplayAlert("收到分享的URL", url, "确定");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:40:34