1

我正在编写一个应用程序,该应用程序需要在设备锁定时在锁定屏幕上显示活动。我还有一个问题要问如何检测设备是否被锁定或设备的锁定超时。如果每个人都知道,请告诉我如何做到这一点。 问题超链接

这是第二个问题。

我有一个 mainactivity(A) 来启动服务。该服务注册一个接收器以检查设备是否屏幕关闭。当设备关闭屏幕时,将在锁定屏幕上显示一个活动(B)。我禁用键盘保护并在我的活动关闭后重新启用以模拟这一点。

但是,如果 mainactivity(A) 正在运行,无论是在屏幕上显示还是 onPause 状态,当屏幕关闭并显示 activity(B) 时,在我关闭 activity(B) 后,finish()在 activity(B) 中,mainactivity (A) 解锁设备后显示,即使 mainactivity(A) 在设备关闭屏幕之前未显示在屏幕上。

这是接收器中的代码

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        Log.d("Receiver", "Screen ON");
    } else {
        Intent i = new Intent();
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.setClass(context, activityB.class);
        context.startActivity(i);
        Log.d("Receiver", "Screen OFF");
    }
}

也许我的英语不好理解。

这是理想的流程

mainactivity(A) -> 按钮启动服务服务注册接收器接收器检测屏幕是否关闭,启动activityB activityB -> 按钮finish()-> 显示键盘保护 -> 解锁 -> 显示设备锁定前的上一个视图/活动

但是 mainactivity(A) -> 启动服务 -> 服务注册接收器 -> 按主页按钮以最小化所有正在运行的应用程序/活动 -> 等待屏幕超时 -> 接收器检测屏幕关闭 -> 启动活动B -> 关闭活动B ->解锁 -> mainactivity(A) 显示

我猜问题出在i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK),activity(B) 是作为任务启动的,所以当 mainactivity(A) 运行时,关闭 activity(B) 会返回到 mainactivity(A)

PS如果我按下后退按钮关闭mainactivity(A),由于服务启动,当屏幕关闭时仍然显示activity(B),当activity(B)关闭时,显示mainactivity(A)。

非常感谢。

4

0 回答 0