2

URI の共有ターゲットとして機能するアプリを構築しています。URI と URL を取得して、ブラウザーを呼び出して共有用の Web サイトにアクセスします。共有ターゲット サンプルを使用してコードを動作させていますが、デバッガの外にいると Launcher.LaunchUriAsync が常に失敗します。ただし、スローされないため、エラーが何であるかを理解するのに苦労しています。おそらくいくつかのセキュリティコンテキスト。

何か案は?コード自体はかなり短いです。シェルから直接実行し、Win-C/Share を介して呼び出すと、success = false になります。マニフェストに 3 つのネットワーク宣言がすべて設定されていることを確認しました。他の考え?

if (this.shareOperation.Data.Contains(StandardDataFormats.Uri))
{
    Uri uri = await this.shareOperation.Data.GetUriAsync();
    if (uri != null)
    {
        Uri tempUri;
        Uri.TryCreate("http://www.mysite.com/#/search?v=results&bk=1.0&q="+uri.ToString(), UriKind.Absolute, out tempUri);
        bool success = await Windows.System.Launcher.LaunchUriAsync(tempUri);
        if (success) {
            contentValue.Text += "Success invoking browser" + ":URL="+tempUri.ToString()+ Environment.NewLine;
        } else {
            contentValue.Text += "Fail invoking browser" + ":URL=" + tempUri.ToString() + Environment.NewLine;
        }
    }
}
4

2 に答える 2

1

共有ターゲットは、別のアプリケーションを起動するべきではありません。共有ターゲットは、共有ペイン内でホストされることを目的としており、ユーザーがアプリやサービスとコンテンツを共有するための迅速でコンテキスト内の方法を提供する必要があります。

あなたの場合、おそらくWebViewをホストして、それをサービスのURLにナビゲートする必要がありますか?

于 2012-04-27T04:54:10.600 に答える
0

LaunchUriAsync を正常に呼び出すには、いくつかの条件を満たす必要があります。

ここ MSDN で見られるように、次のことを確認する必要があります。

  1. API が呼び出されたときに、呼び出し元のアプリがユーザーに表示されている必要があります。
  2. この API を従来の Windows アプリケーションから呼び出す場合を除き、この API は ASTA スレッド (UI スレッドとも呼ばれます) 内から呼び出す必要があります。
  3. ネットワークの場所を指す file:/// URI など、イントラネット URI を起動するには、マニフェストで privateNetworkClientServer 機能を指定する必要があります。
  4. この方法を使用して、ローカル ゾーンで URI を起動することはできません。たとえば、アプリは file:/// プロトコルを使用してローカル コンピューター上のファイルにアクセスすることはできません。代わりに、ストレージ API を使用してファイルにアクセスする必要があります。

最初の 2 つの条件のいずれかが、コードが失敗する理由だと思います。(少なくともそれは私の問題でした)

于 2016-01-11T20:45:02.150 に答える