我必须在 App.xaml.cs 上添加功能才能使其正常工作。我在 OnStart 上添加了功能,但现在它会间歇性地一次又一次地将我从应用程序中注销。根据下面的代码,我需要做什么才能让它停止这样做。或者我的代码有问题。这是我最新的代码:
namespace MyApp
{
public partial class App : Application
{
DateTime _sessionStart;
public App()
{
InitializeComponent();
DatabaseManager = new DatabaseManager(new DatabaseService());
HttpManager = new HttpManager(new HTTPService());
MainPage = new NavigationPage(new LoginPage());
}
protected override void OnStart()
{
// Handle when your app starts
_sessionStart = DateTime.Now;
Device.StartTimer(TimeSpan.FromSeconds(60), () =>
{
// Check if 24 hours has elapsed
if (DateTime.Now > _sessionStart.AddHours(24))
{
//logout
MainPage = new NavigationPage(new LoginPage());
}
return true; // True = Repeat again, False = Stop the timer
});
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
尝试通过在 Main 上注册自定义应用程序来跟踪空闲时间(应用程序中没有触摸的时间)。请参阅下面的示例
Set TimeoutInSeconds
值到您想要的间隔(例如 24 小时)
public class Application
{
// This is the main entry point of the application.
static void Main (string[] args)
{
UIApplication.Main (args, "MYCUSTOMAPP", "AppDelegate");
}
}
[Register ("MYCUSTOMAPP")]
public class MYCUSTOMAPP : UIApplication
{
const int TimeoutInSeconds = 1800; // 30 minutes
NSTimer idleTimer;
public override void SendEvent (UIEvent uievent)
{
base.SendEvent (uievent);
if (idleTimer == null)
ResetTimer ();
var allTouches = uievent.AllTouches;
if (allTouches != null && allTouches.Count > 0 && ((UITouch)allTouches.First ()).Phase == UITouchPhase.Began)
ResetTimer ();
}
void ResetTimer ()
{
if (idleTimer != null)
idleTimer.Invalidate ();
idleTimer = NSTimer.CreateScheduledTimer (new TimeSpan (0, 0, TimeoutInSeconds), (t) => TimerExceeded());
}
void TimerExceeded ()
{
NSNotificationCenter.DefaultCenter.PostNotificationName ("TimeoutNotification", null);
}
}
将观察者添加到您的视图控制器以将其注销
public override void ViewDidLoad()
{
base.ViewDidLoad();
NSNotificationCenter.DefaultCenter.AddObserver(new NSString("TimeoutNotification"), handleInactivityNotification);
}
public void handleInactivityNotification(NSNotification notification)
{
//Return to login page (Root view controller)
this.NavigationController.PopToRootViewController(true);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)