gpt4 book ai didi

java - 使用 setShowWhenLocked(true) 解锁后如何锁定 Android 设备;

转载 作者:行者123 更新时间:2023-12-01 12:06:01 24 4
gpt4 key购买 nike

我正在创建一个视频通话应用程序并具有以下代码,当应用程序收到推送通知时会调用该代码 - 它解锁屏幕并呈现“来电”用户界面:

public class MainActivity extends ReactActivity {

@Override
protected String getMainComponentName() {
return "x";
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
}

这在来电时工作正常 - 用户可以使用呈现的 UI 与应用程序交互。但是,问题是如果应用程序在前台,然后手机被锁定,当按下手机侧面的解锁按钮时,会显示应用程序,而不是显示键盘锁/锁定屏幕。如果应用程序位于前台并且手机已锁定并且按下解锁按钮,则它永久允许访问该应用程序。

我希望应用程序在收到推送通知并且屏幕被锁定时出现,但我也希望用户能够完全锁定设备,并且在按下锁定按钮后不让用户访问应用程序。

我怎样才能做到这一点?

最佳答案

据我所知,该问题的最佳解决方案是进行多种类型的 Activity 。

在第一个 Activity (调用 Activity )中,您将 setShowWhenLocked 和 setTurnScreenOn 设置为 true(就像您所做的那样)。
当有来电时,您启动处理调用的调用 Activity ,因为您设置了这两个属性,即使设备被锁定, Activity 也会显示给用户。
此外,当通话 Activity 处于 Activity 状态时,用户将能够“锁定”他的设备(即按下电源按钮),当他解锁时,他将再次看到通话 Activity (无需输入代码)。
这与大多数默认的 android 调用/电话应用程序具有相同的行为。

第二个 Activity 用于您的其他逻辑,只有在用户真正解锁手机时才能访问。 (即输入代码)
因此,当电话结束时,您从调用 Activity 开始第二个 Activity ,例如像这样:

 Intent intent = new Intent(this, SecondActivity.class);
this.startActivity(intent);

在哪里 this是调用 Activity 的实例

刚开始 SecondActivity如果手机之前被锁定,则会自动锁定在锁屏后面(即不解锁就无法访问)。

我只是在一个小型测试项目中测试了这种行为,如果您需要进一步的帮助,请问。

关于java - 使用 setShowWhenLocked(true) 解锁后如何锁定 Android 设备;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60876523/

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