Windows手机-如何双击退出



我正在学习开发windowsphone应用程序。我从一个基于浏览器的应用程序开始,遵循本教程-http://blogs.msdn.com/b/jaimer/archive/2011/02/04/back-button-press-when-using-webbrowser-control-in-wp7.aspx.我正在试验http://m.facebook.com我可以正确地使用后退按钮转到上一页和所有这些东西,但我无法在双击后退按钮时实现退出。

我见过许多浏览器应用程序在双击后退按钮后退出。例如-Flipkart-http://www.windowsphone.com/en-us/store/app/flipkart/84fc03ea-210d-4e3e-88e0-de502a2434c5

后退按钮没有双标签事件。我们如何才能做到这一点?

您可以创建一个全局long,表示用户上次按下后退按钮的时间。每次按下后退按钮,您都可以使程序减去经过的刻度数。如果它通过了一小段时间,你可以让你的程序退出。如果没有,请再次设置最后一个刻度变量。

您可以使用System.DateTime.Ticks获取表示当前时间的当前刻度。

简单代码示例:

long LastExitAttemptTick = DateTime.Ticks;
private void BackButtonPressHandler(...)
{
    long thisTick = DateTime.Ticks;
    if (LastExitAttemptTick - thisTick < [specified amount])
        throw new Exception("Exit Exception"); //You can use XNA, but this is a quick and dirty way of exiting
    else
        LastExitAttemptTick = DateTime.Ticks;
}

可以使用10000000个刻度(1秒)的值。MSDN说每毫秒有10000个滴答声,所以10000*1000=10000000。

编辑:或者,正如您所说,您也可以使用DateTime.Now并使用秒值。无论哪种方式都有效。

这种逻辑可以适用于

生成全局变量

int Count=0


     protected ovverride void OnBackKeyPress(CancelEventArgs e)
            {
            if(Count==0)
             {
             e.Canel=true;
              Count++;
             }
            else if(Count==1)
             {
              Count=0;
              //code for exiting
              //may be App.Current.Terminate(); in wp8
             //or in wp7
             //if (NavigationService.CanGoBack)  
             //{
             //    while (NavigationService.RemoveBackEntry() != null)
             //   {
             //        NavigationService.RemoveBackEntry();
            //    }
             //}
             }
            }

希望这能帮助

要在双击时关闭应用程序,可以使用DispatcherTimer任务检查两次单击是否在一秒内,如果是,则关闭应用程序或启动timer,然后再次检查。其片段如下:

DispatcherTimer对象作为类字段,如

DispatcherTimer dt = new DispatcherTimer();

class's constructor中,指定要检查双击interval,并添加event handler以在指定时间过后执行某些操作。你可以在class's constructor

dt.Interval = TimeSpan.FromSeconds(1.0);
dt.Tick += delegate(object s, EventArgs e)
{
    dt.Stop();
};

在这里,我们要做的是指定1秒的timespan,以检查在这一秒内是否发生双击。Tick事件是当计时器完成1秒时我们想要做的事情。我们只是要停止timer

现在导航到返回键事件处理程序,下面是我要检查双击的代码:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
    if (!dt.IsEnabled)
        dt.Start();
    else
        new Microsoft.Xna.Framework.Game().Exit();
}

当第一次点击时,timer未启动,它将进入if条件并启动计时器。如果第二次敲击发生在1秒之后,那么我们在构造函数中写入的Tick事件将触发,并且根据写入的逻辑,timer将停止。

现在假设双击因此在1秒内发生。对于第一次点击,它将像往常一样启动timer,如果用户立即再次按下后退按钮,则在其处理程序中,它将检查timer是否正在运行。由于timer尚未完成其1秒间隔,否则条件将被激发,应用程序将关闭。

我使用XNA library/shortcut来强制关闭应用程序。要使用new Microsoft.Xna.Framework.Game().Exit();方法,您应该在引用中添加microsoft.xna.framework.game.dll

根据需要设置TimeSpan间隔。

希望这能有所帮助。谢谢

EDIT:

有时XNA没有安装在windows 8上。这里有一个解决方案,以便您在项目中添加上面提到的程序集引用。

http://blogs.msdn.com/b/astebner/archive/2012/02/29/10274694.aspx

你必须下载大约23MB的更新。

为了节省时间,这里有一个Dropbox链接到上面的组装参考:

https://db.tt/RYTwv7cS

是的,后退按钮没有双击事件。您必须编写自己的逻辑才能在双击设备上退出应用程序。以下是可能对您有所帮助的解决方案。

创建全局变量并使用零进行初始化

Int TapCount=0;

现在用您自己的逻辑覆盖OnBackKeyPress事件。

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
           TapCount++;
         if(TapCount==2)
          {
            if( windows phone 8 )
               {
                 Application.Current.Terminate(); 
               }
              else
              {
                 if (NavigationService.CanGoBack)
                {
                  while (NavigationService.RemoveBackEntry() != null)
                  {
                     NavigationService.RemoveBackEntry();
                  }
               }
            }
          }
         else
           e.Canel=true;
            base.OnBackKeyPress(e);
        }

它非常简单。我是这样实现的:

首先声明全局变量:

int count;

现在在OnNavigatedTo(NavigationEventArgs e)方法中初始化其值:

count = 0;

现在,最后将以下代码添加到您的cs文件中:

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) { count++; e.Cancel = true; if(count == 2) { e.Cancel = false; base.OnBackKeyPress(e); } }

最新更新