9

私はWindowsPhone8アプリに取り組んでおり、DataTransferManagerを介してコンテンツを共有しようとしています。Windows APIのドキュメントには、Windows Phoneでサポートされていると記載されていますが、DataTransferManager.GetForCurrentView()関数を呼び出すと例外が発生します

System.NotSupportedException was unhandled by user code
  HResult=-2146233067
  Message=Specified method is not supported.
  Source=Windows
  InnerException: 

私は答えを探していましたが、同じ問題を抱えている人を見つけることができません。助けていただければ幸いです。このトピックに関するすべてのサンプルはWindows8固有のようですが、Phone8にはこれらの機能が含まれています。これが私のアプリのサンプルコードです。

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
        dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(dataTransferManager_DataRequested);
    }

    private void dataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs e)
    {
        DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "Share Text Example";
        requestData.Properties.Description = "An example of how to share text.";
        requestData.SetText("Hello World!");
    }

    private void Button_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
    {
        DataTransferManager.ShowShareUI();
    }

繰り返しになりますが、ページがDataTransferManager.GetForCurrentView();関数に読み込まれると例外が表示されるため、他の行には到達しませんが、とにかくそれらが含まれます。権限とアセンブリを追加/削除しようとしましたが、何かが足りないはずです。また、関数をさまざまなイベント(onTap関数など)に配置してみたところ、同じ結果が得られました。

誰かがこれを自分で試すことに興味があるなら、ここにいくつかのドキュメントがあります:

DataTransferManager

DataRequested

DataPackage

GetForCurrentView()

アップデート

この質問のコンテキストを考えると、これは最善の解決策ではないかもしれませんが、DataTransferManagerを使用するのではなく、以下に説明するように電子メール/SMS/リンクタスクを実装しています。WP8ではDataTransferManagerにアクセスできない可能性があり、タスクはさまざまな機能を実行しますが、目的の機能を実行するための最良の方法のようです。

4

4 に答える 4

10

ランチャーで探していたもののほとんどを見つけたと思います... Windows 8 の一般的な共有機能を使用するだけでなく、タスク/ランチャーで特定することができます。

残念ながら、チャームほど多くの共有オプションがありません。電子メール/SMS/ソーシャル用にいくつかの機能を実装する予定ですが、これまでのところこれが最良のソリューションです.

ここに私が実装する機能があります

    private void ShareLink(object sender, System.Windows.Input.GestureEventArgs e)
    {
        ShareLinkTask shareLinkTask = new ShareLinkTask()
            {
                Title = "Code Samples",
                LinkUri = new Uri("http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff431744(v=vs.92).aspx", UriKind.Absolute),
                Message = "Here are some great code samples for Windows Phone."
            };

        shareLinkTask.Show();
    }


    private void ShareEmail(object sender, System.Windows.Input.GestureEventArgs e)
    {
        EmailComposeTask emailComposeTask = new EmailComposeTask()
            {
                Subject = "message subject",
                Body = "message body",
                To = "recipient@example.com",
                Cc = "cc@example.com",
                Bcc = "bcc@example.com"
            };

        emailComposeTask.Show();
    }

    private void ShareSMS(object sender, System.Windows.Input.GestureEventArgs e)
    {
        SmsComposeTask smsComposeTask = new SmsComposeTask()
            {
                Body = "Try this new application. It's great!"
            };

        smsComposeTask.Show();
    }

参照:

Windows Phone のランチャー

リンクの共有タスク

于 2012-11-29T14:37:28.283 に答える
2

私の API リファレンスによると、DataTransferManagerネイティブ アプリ専用に予約されています。Windows Phone API クイックスタート.

于 2012-11-28T01:15:49.300 に答える
0

完全に修飾された方法を使用してみましたか?これは次のようになります。

DataTransferManager dataTransferManager = indows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

また、ターゲットがWindowsPhone8であることを確認してください。

于 2012-11-27T21:16:39.980 に答える
0

Windows 8 共有契約は、WP8 ではサポートされていません。WP8にはシェアチャームすらありません。なぜ DataTransferManager を使おうとしているのですか?

共有契約を使用する代わりに、ほとんどのユースケースは WP8 app2app カスタム プロトコルとファイル拡張子で問題なく機能します。WP8 アプリを使用すると、アプリ間でファイルとデータを転送できます。共有コントラクトの標準化されたコントラクトはなくなりましたが、アプリはカスタム プロトコルとファイル拡張子を使用して独自のコントラクトを作成できます。

ここでは、たとえば、 Nokia Music カスタム プロトコルの実際のサードパーティ実装について詳しく知ることができます。

于 2012-11-29T01:57:30.467 に答える