Windows phone 7 用密码锁定应用程序
在WP应用程序中,我们需要提供用户选项以使用密码锁定应用程序 由于我了解WP应用程序生命周期,我需要在app.Application_激活、app.Application_停用和开始页面中设置锁定页面的导航,但我无法在app类中使用导航服务Windows phone 7 用密码锁定应用程序,windows-phone-7,windows-phone-8,Windows Phone 7,Windows Phone 8,在WP应用程序中,我们需要提供用户选项以使用密码锁定应用程序 由于我了解WP应用程序生命周期,我需要在app.Application_激活、app.Application_停用和开始页面中设置锁定页面的导航,但我无法在app类中使用导航服务 我不想在其他页面中放置导航代码以锁定页面,或者没有其他选项?为什么不创建一个输入密码的起始页面 对于拥有MainPage.xaml的实例,请创建一个InsertPasswordPage.xaml,并在WMAppManifest上引用它作为起始页: <
我不想在其他页面中放置导航代码以锁定页面,或者没有其他选项?为什么不创建一个输入密码的起始页面 对于拥有MainPage.xaml的实例,请创建一个InsertPasswordPage.xaml,并在WMAppManifest上引用它作为起始页:
<DefaultTask Name="_default" NavigationPage="InsertPasswordPage.xaml" />
并在InsertPasswordPage.xaml上插入所有密码逻辑,当用户成功登录时,只需导航到主页;)
编辑:正如Gambit所说,如果用户按下后退按钮,他将返回插入密码页面,但您可以通过在用户登录后从后退页面删除该页面来解决此问题。您应该在
应用程序启动
和应用程序激活
事件中添加检查
应用程序首次打开时的启动事件,以及用户离开后返回应用程序执行其他操作时的激活事件
让这些事件都设置一个标志,并使所有页面在导航到该标志时从检查中继承的基页。检查是否设置了该标志,如果设置了,则显示登录提示,然后在成功输入密码后清除该标志。除了正常启动应用程序外,此方法还将处理FAS、远链接和深度链接
当心一些选择器返回应用程序时会触发激活的事件。如果需要,为这些添加额外的处理。我编写了自己的解决方案,但可能它并没有那么优雅 应用程序锁定逻辑:用户使用密码启用应用程序锁定,我们在应用程序类中处理应用程序禁用和应用程序关闭事件,如果用户启用此选项,则将应用程序标记为锁定。然后,在每个页面上,我们应该检查:应用程序当前是否已锁定,如果已锁定,我们应该导航到AppLockedWithPasswordPage。在AppLockedWithPasswordPage上,我们需要检查用户的密码是否正确,请调用NavigationService.GoBack() 因此,我们需要执行6个步骤:
// AppLockedWithPasswordPage
protected override void OnBackKeyPress(CancelEventArgs e)
{
// Preventing back key navigation
e.Cancel = true;
}
// AppLockedWithPasswordPage
private void UnlockAppButton_Click(object sender, RoutedEventArgs e)
{
if (PasswordBox.Password.Equals(IsolatedStorageSettings["AppLockPassword"]))
{
NavigationService.GoBack();
}
else
{
// Say user, that password incorrect, etc...
}
}
private void SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking()
{
if ((bool)IsolatedStorageSettings["IsUserEnabledAppLockWithPassword"])
{
IsolatedStorageSettings["IsAppCurrentlyLocked"] = true;
}
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking();
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking();
}
// Create some class, like PagesUtils or so on with check method
private static Uri uriToAppLockedWithPasswordPage = new Uri("pathToAppLockedWithPasswordPage", UriKind.Relative);
public static void NavigateToAppLockedWithPasswordPageIfAppLocked(PhoneApplicationPage page)
{
if ((bool)IsolatedStorageSettings["IsAppCurrentlyLocked"])
{
page.NavigationService.Navigate(uriToAppLockedWithPasswordPage);
}
}
// In each page you want to lock add
protected override void OnNavigatedTo(NavigationEventArgs e)
{
PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked();
base.OnNavigatedTo();
}
当然,真正的代码要好得多,这只是一个简单的例子,我希望它能帮助你这种方法的问题是,当用户点击主页上的后退按钮时,他会再次遇到密码页面。此外,如果用户从某个任意页面跳出应用程序,当他们跳回应用程序时,密码页面将不会显示以阻止他们。错误的是,您可以从后堆栈中获取该页面以解决该问题。感谢您提供的关于编辑帖子的提示;)从后堆栈中删除页面不会解决用户通过Home按钮跳出应用程序,然后通过back按钮返回应用程序的问题。即使在这个应用程序切换场景中,用户也需要被密码页面阻止。Gambit请阅读我的编辑,只有在用户登录后才从Backback中删除。现在,这取决于用例,如果应用程序被挂起,则应显示通行证或不显示通行证,这取决于情况,可以使用remove from Backback,也可以不确定您是否理解该场景。如果你的backbackback看起来像:Login->MainPage->Page2->Page3->Page4,那么现在用户将退出应用程序。当他返回应用程序时,backback被恢复,应用程序将希望将他放在第4页。但他应该立即被登录页面阻止。从Backback中删除或不删除登录页面并不能解决此问题。我正在处理Application_Deactivated和Application_Closing事件,并设置应用程序被锁定的标志,然后在每个页面上进行检查,如果标志被锁定,将打开LockPagetrue@ArtemZinnatullin你是说你已经按照我的建议做了,或者你的评论中还有其他问题吗?如果我的答案回答了你的问题,你应该接受答案并投票。不,我想说的是,应用程序启动和应用程序激活事件没有用处,因为我不能在这个事件中将导航代码放入AppLockedWithPassword页面。正如你所看到的,我已经解决了我的问题,并且写了自己的answer@ArtemZinnatullin我没说用这些事件来触发导航。我说用它们来跟踪何时显示密码提示。正如您在关闭和停用事件时所做的那样。我会为您的页面使用基类来调用
PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked()
,这样您就不必在每个页面上都添加它。