gpt4 book ai didi

c# - 如何使用 Xamarin 应用程序开发自动注销

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:44 24 4
gpt4 key购买 nike

我必须在 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 上注册自定义应用程序来跟踪空闲时间(应用程序中没有触摸的时间)。请参见下面的示例

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);
}
}

向您的 View Controller 添加一个观察者以将其注销

    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);
}

关于c# - 如何使用 Xamarin 应用程序开发自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com