android - 如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?
<p><p>我正在开发一个 <strong>Xamarin Forms</strong> 应用程序。它有一个 <code>Entry</code> 字段用于初始页面上的访问代码。我需要扩展它的功能,以便在遇到自定义 url 方案 <code>myscheme://visitcode</code> 时打开应用程序,并且 <code>Entry</code> 将有它的 <code>Text</code> 值预填充了 visitcode 的值。</p>
<p>我已成功启动应用程序。</p>
<p>我将我的方案添加到我的 iOS 项目中的 <code>info.plist</code> 文件中,当我在 iPhone 上的 Safari 中单击我的自定义 url 方案时,它会正确启动应用程序。</p>
<p>我在我的 Droid 项目中的 MainActivity 上方添加了以下行:</p>
<pre><code> { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataScheme = "myscheme")]
</code></pre>
<p>当我在 Android 手机的 Chrome 中单击我的自定义 url 方案时,它会正确启动应用程序。</p>
<p>唯一剩下的障碍是检索该值并用它填充 <code>Entry</code> 字段。</p>
<p>有人可以帮我吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><blockquote>
<p>Note: I haven't tested this yet, so make sure your app lifecycle and the place where you handle the events are matching the Xamarin.Forms app lifecycle. That is, make sure <code>Xamarin.Forms.Application.Current</code> is not null. If it is, reshuffle your code to work around that.</p>
</blockquote>
<p>对于 <code>iOS</code>,您必须在 <code>AppDelegate.cs</code> 中覆盖 <code>OpenUrl</code>:</p>
<pre class="lang-cs prettyprint-override"><code> public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation);
</code></pre>
<p>在 <code>Android</code> 中,您可以在 <code>MainActivity.cs</code>、<code>OnCreate</code> 或用作入口点的任何其他方法中处理它:</p>
<pre class="lang-cs prettyprint-override"><code>var intent = Intent;
var uri = intent.Data;
</code></pre>
<p>这应该允许您检索 <code>url</code> 的参数。</p>
<p>然后您可以检索当前的 <code>Xamarin.Forms</code> <code>Application</code> 对象,方法是:</p>
<pre class="lang-cs prettyprint-override"><code>var myapp = Xamarin.Forms.Application.Current as MyApplication;
</code></pre>
<p>现在,由您来检索正确的条目、 View 模型、服务或任何连接点的东西。</p></p>
<p style="font-size: 20px;">关于android - 如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/31417227/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/31417227/
</a>
</p>
页:
[1]