【问题标题】:How to be notified when screen pinning is turned off in Android 5.0 Lollipop?如何在 Android 5.0 Lollipop 中关闭屏幕固定时收到通知?
【发布时间】:2014-11-11 00:30:02
【问题描述】:

我有一个在后台运行的应用程序,并在手机上发生特定事件时启动一个活动。我在 Android 5.0 中发现,当用户使用另一个应用程序打开屏幕固定时,startActivity(intent) 调用将被完全忽略。我的应用不知道 Activity 没有启动,因此用户在手动重新打开我的应用之前将没有机会再次看到该 Activity。

我是否可以注册任何类型的事件以在屏幕固定关闭时收到通知,以便我可以重新尝试开始我的活动?

【问题讨论】:

  • 与其开始活动,不如考虑在Notification 上使用全屏PendingIntent。在 5.0 之前,这将启动 PendingIntent 中指定的活动。在 5.0+ 上,它将导致提示 Notification。我还没有玩过 pinning,但我希望单挑 Notification 仍然出现,或者至少以常规 Notification 结束。
  • @CommonsWare 我没有尝试过通知,但最初描述的功能之一(当屏幕固定被宣布为“任务锁定”时)是来自其他应用程序的通知不会 出现。

标签: android android-notifications android-5.0-lollipop android-screen-pinning


【解决方案1】:

这是 ActivityManager 类中的方法,它在屏幕固定的情况下告诉当前任务是否被锁定:

!mActivityManager.isInLockTaskMode()

有关更多详细信息,请查看此链接: http://developer.android.com/reference/android/app/ActivityManager.html#isInLockTaskMode%28%29

【讨论】:

  • OP:您可以使用它来延迟通知,直到它可以显示。
【解决方案2】:

您的应用必须是设备管理员(具有用户授予的管理权限)。完成后,您可以实现此回调:

AdminReceiver.onLockTaskModeExiting(Context context, Intent intent)

在固定模式停止时做一些事情。

要了解如何使您的应用成为管理员应用:您可以查看我之前的答案之一here

【讨论】:

  • 谢谢!这正是我一直在寻找的。实际上,我的应用程序已经设置为设备管理员。但是,我没有为此获得事件触发器。我的AdminReceiver 类在AndroidManifest.xml 中具有BIND_DEVICE_ADMIN 权限和DEVICE_ADMIN_ENABLED 意图过滤器。我在其onReceive() 方法中捕获了其他事件(例如密码更改),但android.app.action.LOCK_TASK_EXITING 事件没有触发。你知道这是否需要任何其他设置吗?
  • 我写了一篇完整的文章来解释屏幕固定,可在florent-dupont.blogspot.fr/2015/02/… 找到。源代码也可用,因此您可以使用它来帮助您获取有关 pin/unpin 事件的通知。
  • 这真的适用于设备管理员应用程序,还是仅适用于设备所有者应用程序?
  • @KevinKrumwiede kiosk 模式,即 locktaskmode 仅通过管理员/所有者模式完全可以接受
  • @Arul 据我所知没有。但我应该澄清一下,设备所有者可以授予其他管理应用程序的权限。普通的管理应用程序无法将其授予自己。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多