如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?

Posted

技术标签:

【中文标题】如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?【英文标题】:How can I access the values passed into my app via a custom url scheme from within my C# code? 【发布时间】:2015-07-14 20:58:05 【问题描述】:

我正在开发一个 Xamarin Forms 应用程序。它有一个Entry 字段,用于初始页面上的访问代码。我需要扩展它的功能,以便在遇到自定义 url 方案 myscheme://visitcode 时打开应用程序,并且 EntryText 值将预先填充 visitcode 的值。

我已成功启动应用程序。

我将我的方案添加到我的 ios 项目中的 info.plist 文件中,当我在 iPhone 上的 Safari 中单击我的自定义 url 方案时,它会正确启动应用程序。

我在我的 Droid 项目中的 MainActivity 上方添加了以下行:

[IntentFilter(new[]  Intent.ActionView , Categories = new[]  Intent.CategoryDefault, Intent.CategoryBrowsable , DataScheme = "myscheme")]

当我在 android 手机的 Chrome 中单击我的自定义 url 方案时,它会正确启动应用程序。

唯一剩下的障碍是检索该值并用它填充Entry 字段。

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

注意:我尚未对此进行测试,因此请确保您的应用生命周期和处理事件的位置与 Xamarin.Forms 应用生命周期相匹配。也就是说,确保Xamarin.Forms.Application.Current 不为空。如果是,请重新调整您的代码以解决此问题。

对于iOS,您必须在AppDelegate.cs 中覆盖OpenUrl

    public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation);

Android 中,您可以在MainActivity.csOnCreate 或任何其他用作入口点的方法中处理它:

var intent = Intent;
var uri = intent.Data;

这应该允许您检索url 的参数。

然后,您可以通过以下方式检索当前的 Xamarin.Forms Application 对象:

var myapp = Xamarin.Forms.Application.Current as MyApplication;

现在,由您来检索正确的条目、视图模型、服务或任何连接点的东西。

【讨论】:

我想知道您是否可以澄清 Intent 实例在 MainActivity、OnCreate 中的来源。 OnCreate 需要一个 Bundle....【参考方案2】:

Xamarin 商店中有一个组件可以为您处理这个问题:

http://components.xamarin.com/view/rivets

这将消除构建本机实现时冗长的代码要求。

【讨论】:

链接已关闭。请改用 NuGet 包。 Link to project。该项目不再维护,并且有一些限制。例如。 Rivets 包与 Android 6.0 中的应用链接不兼容。所以你不应该再使用它了。

以上是关于如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?的主要内容,如果未能解决你的问题,请参考以下文章

ERP中通过自定义单打开流程图

Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO

从 UINavigationController 中通过自定义转换关闭 UIViewController 时出现黑屏

如何从我的文件夹中获取缩略图?

Laravel 中通过自定义命令创建 service 服务层文件

如何在 C# 中调用自定义 url 协议?