如何让.NET MAUI应用显示在设备的分享对话框中?
在.NET MAUI中让应用出现在分享对话框并接收URL
要让你的.NET MAUI应用出现在系统分享列表里,接收其他应用(比如浏览器、新闻APP)分享的URL,需要针对不同平台配置清单文件,再实现数据接收逻辑,具体步骤如下:
安卓平台配置
- 修改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> - 获取分享的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平台配置
- 修改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> - 获取分享的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平台配置
- 修改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> - 获取分享的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
相关产品推荐
相关产品推荐

