如何判断我的应用程序是否从后台恢复?

Dha*_*dra 11 android

我希望在应用程序进入后台时锁定它的应用程序,当它恢复时,我想显示我自己的锁定屏幕.锁定屏幕是我的应用程序的活动.

成功登记密码后,用户可以看到恢复的活动,否则他不能.

我怎样才能做到这一点?

Sky*_*ius 12

主要问题是当你Activity从后台启动时必须获得特定的行为.onPause()并且onResume()每次切换时调用,Activities而不是在最小化应用程序时调用.为了解决这个问题,您可以从中获取当前正在运行的任务ActivityManager,并将其包名称与您的应用程序进行比较:

private boolean isApplicationInBackground() {
    final ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    final List<RunningTaskInfo> tasks = manager.getRunningTasks(1);
    if (!tasks.isEmpty()) {
        final ComponentName topActivity = tasks.get(0).topActivity;
        return !topActivity.getPackageName().equals(getPackageName());
    }    
    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

public boolean wasPaused = false;

@Override
public void onPause() {
    super.onPause();

    if(isApplicationInBackground()) {
        wasPaused = true;
    }
}

@Override
public void onResume() {
    super.onResume();

    if(wasPaused) {
        lockScreen();
        wasPaused = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

就是这样!我建议你在一个基础上实现这一点,你Activity所有的其他Activities固有的.

  • ActivityManager.getRunningTasks() 似乎已被弃用。 (2认同)

SER*_*PRO 9

如果您拥有全局活动"MyActivity"并且所有活动都从中扩展,则可以实现此目的.

然后在"MyActivity"上覆盖onPause和onStop方法

@Override
public void onPause()
{
    super.onPause();
    setLockStatus(false);
}

@Override
public void onStop()
{
    super.onStop();
    setLockStatus(true);
}
Run Code Online (Sandbox Code Playgroud)

和:

@Override
public void onResume()
{
    super.onResume();
    checkLockScreen();
}
Run Code Online (Sandbox Code Playgroud)

编辑:显然你需要创建方法setLockStatus和checkLockScreen并做任何你想做的事情(比如保存sharedPreferences上的状态).