0

アプリのビューを 1 つだけにしたい。

このビューを外部 URL にする必要があります。

Microsoft の例に従って webBrowser タスクを使用しようとしました。

私は自分のコンストラクターを置きます:

WebBrowserTask webBrowserTask = new WebBrowserTask();

webBrowserTask.Uri = new Uri("http://msdn.microsoft.com", UriKind.Absolute);

webBrowserTask.Show();

ただし、アプリの外に移動する代わりに戻るボタンを押すと、空の最初のページに移動しています...

私のコードは次のようになります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

//added this for push
using Microsoft.Phone.Notification;
using System.Text;

//added this to open an external URL using the WebBrowser Task
using Microsoft.Phone.Tasks;


namespace WindowsPush
{

    public partial class MainPage : PhoneApplicationPage
    {


        // Constructor
        public MainPage()
        {
            /// Holds the push channel that is created or found.
            HttpNotificationChannel pushChannel;

            // The name of our push channel.
            string channelName = "ToastSampleChannel";

            InitializeComponent();

            // Try to find the push channel.
            pushChannel = HttpNotificationChannel.Find(channelName);

            // If the channel was not found, then create a new connection to the push service.
            if (pushChannel == null)
            {
                pushChannel = new HttpNotificationChannel(channelName);

                // Register for all the events before attempting to open the channel.
                pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

                // Register for this notification only if you need to receive the notifications while your application is running.
                //pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

                pushChannel.Open();

                // Bind this new channel for toast events.
                pushChannel.BindToShellToast();

            }
            else
            {
                // The channel was already open, so just register for all the events.
                pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
                pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

                // Register for this notification only if you need to receive the notifications while your application is running.
                //pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

                // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
                System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
                // MessageBox.Show(String.Format("Channel Uri is {0}", pushChannel.ChannelUri.ToString()));

            }

            object uniqueID;
            if (Microsoft.Phone.Info.DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out uniqueID) == true)
            {
                byte[] bID = (byte[])uniqueID;
                string deviceID = Convert.ToBase64String(bID);   // There you go
                System.Diagnostics.Debug.WriteLine("Device Unique Id is: {0}", deviceID);
            }



            //opening the external URL using webBrowserTask
            WebBrowserTask webBrowserTask = new WebBrowserTask();

            webBrowserTask.Uri = new Uri("http://msdn.microsoft.com", UriKind.Absolute);

            webBrowserTask.Show();


        }


        void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                // Display the new URI for testing purposes.   Normally, the URI would be passed back to your web service at this point.
                System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());
                MessageBox.Show(String.Format("Channel Uri is {0}", e.ChannelUri.ToString()));
            });
        }


        void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
        {
            // Error handling logic for your particular application would be here.
            Dispatcher.BeginInvoke(() =>
                MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}", e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData)));
        }


    }
}

私が必要とするのは、アプリの最初で唯一のビューに外部 URL をロードすることだけです。

どうすればそれができますか?

4

2 に答える 2

0

を使用する場合はWebBrowserTask、未処理の例外をスローして、アプリに戻ったときにアプリを閉じることができます。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.NavigationMode == NavigationMode.Back)
    {
        throw new Exception("deliberately doing this to force the app to close");
    }
}

Windows Phone 8 でこれを行う場合Application.Current.Terminate();、例外をスローする代わりに呼び出すことができます。

ただし、送信する前に、外部 Web サイトを起動するだけのアプリのマーケットプレイス認定要件を必ず確認してください。

于 2013-03-21T17:40:31.590 に答える