我希望在应用程序进入后台时锁定它的应用程序,当它恢复时,我想显示我自己的锁定屏幕.锁定屏幕是我的应用程序的活动.
成功登记密码后,用户可以看到恢复的活动,否则他不能.
我怎样才能做到这一点?
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固有的.
如果您拥有全局活动"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上的状态).
| 归档时间: |
|
| 查看次数: |
12614 次 |
| 最近记录: |