【问题标题】:Emergency notification which does not prompt unlocking on locked screen to open activity在锁定屏幕上不提示解锁以打开活动的紧急通知
【发布时间】:2018-11-16 17:10:04
【问题描述】:

有一个名为 Medical Id 的紧急应用程序。它有一个了不起的功能,它可以在锁定屏幕上显示通知。用户只需双击通知即可打开活动。对于其他应用通知,如果用户点击,它会提示先解锁。我正在寻找相同的功能,但无法实现相同的功能。我尝试向附加的窗口添加标志。

@Override
    public void onAttachedToWindow()
    {
        super.onAttachedToWindow();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON &
                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD &
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED &
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON &
                WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
    }

在清单中的活动中也添加了显示锁定屏幕,但在打开活动之前会提示解锁屏幕。为了清楚起见,请查看医疗 ID。我不知道他们用什么来绕过解锁。通知的手机设置在我的手机中是公开的。令人惊奇的是,即使您的手机通知设置是私密的,即使没有其他通知,也会出现医疗 ID 通知。任何线索都是有帮助的。

【问题讨论】:

  • 对于 Marshmallows 设备,如果要在锁定屏幕上方显示通知,则需要请求 ScreenOverlay 的权限 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName( ))); startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
  • @AndyDeveloper 我们可以有覆盖通知吗?覆盖活动使用您在棉花糖中的上述答案成功绕过锁定屏幕。就我而言,单击通知仍会提示解锁。我认为如果通知也被覆盖,它将起作用。请分享您的想法。
  • 不,它仍然要求您解锁屏幕。您可以尝试 DevicePolicyManager 以编程方式锁定和解锁设备。这里是开发者站点reference,这里是stackoverflow reference。希望这会对你有所帮助。

标签: android android-notifications android-notification-bar


【解决方案1】:

你应该使用管道 |而不是 & 符号 &

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

这仅适用于 Android 4.4 以上

【讨论】:

  • 是的,我第一次尝试了管道,但它甚至没有帮助。我正在棉花糖设备上进行测试。
【解决方案2】:

如果您想在锁定屏幕点击通知时显示 Activity,您可以在 Activity 生命周期的 OnCreate 中执行此操作

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setTurnScreenOn(true);
        setShowWhenLocked(true);
    } else {
        window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多