2

電話がスリープ状態になるか、アプリがオフになる (つまり、デスクトップまたは別のアプリに移動する) たびに現在のユーザーを認証しないように設定して、アプリが再びオンになったときに常に認証する必要があるようにします。

アプリが現在アクティブでない場合にのみ、各アクティビティのOnStopまたはメソッドでこれを実行したくありません。OnPause

OnStopApplication ベース オブジェクトまたはその他のグローバル コンテキストに、次のようなメソッドが存在することが理想的です。

public class MyApp : Application
{
    public override void OnCreate()
    {
        base.OnCreate();
    }
}

しかし、残念ながらこれは存在しません。これは可能ですか?

4

1 に答える 1

0

ないことがわかりました。解決策は、非アクティブタイマーでテストすることでした。たとえば、次のようになります。

private void InactivityTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    _secondsElapsed += 1;
    if (_screenEventReceiver.IsScreenOff || IsApplicationSentToBackground(this.ApplicationContext))
    {
       // do things that you would OnStop here
    }

}

public static bool IsApplicationSentToBackground(Context context) 
{
    try
    {
        var am = (ActivityManager)Context.GetSystemService(Context.ActivityService);
        var tasks = am.GetRunningTasks(1);

        if (tasks.Count > 0)
        {
            var topActivity = tasks[0].TopActivity;
            if (topActivity.PackageName != context.PackageName)
            {
                return true;
            }
        }
    }
    catch (System.Exception ex)
    {
        Errors.Handle(Context, ex);
        throw;
    }

    return false;
}

    private class ScreenEventReceiver : BroadcastReceiver
    {
        public bool IsScreenOff { get; private set; }

        public override void OnReceive(Context context, Intent intent)
        {
            if (intent.Action == Intent.ActionScreenOff)
            {
                IsScreenOff = true;
            }
            else
            {
                IsScreenOff = true;
            }
        }
    }
于 2013-09-25T10:36:33.917 に答える