【问题标题】:Displaying a Toast notification in Password Unlock Screen在密码解锁屏幕中显示 Toast 通知
【发布时间】:2012-09-18 07:57:41
【问题描述】:

每当用户输入错误密码时,我都会尝试在 PasswordUnlockScreen.java 的 verifyPasswordAndUnlock() 中显示 Toast 通知。我写了如下代码,构建成功。

 Toast.makeText(getContext(), "Invalid password", Toast.LENGTH_LONG).show();

但是,Toast 没有出现,因为它实际上出现在主屏幕中,当锁定屏幕位于顶部时,它是不可见的。我通过在用户成功登录时出现另一个 Toast 来验证这一点,并且 Toast 仅在锁定屏幕消失后出现在主屏幕中

我怀疑这是因为 getContext() 返回主屏幕的上下文。如何获取锁屏的上下文? PasswordUnlockScreen.this 连编译都没有,而且 mContext 和 context 都和 getContext() 有同样的问题

【问题讨论】:

  • 也许使用 getContext.getApplicationContext() ?
  • getContext.getApplicationContext() 也不起作用,一旦设置密码锁,它会导致引导循环,由于系统进程中的致命异常(java.lang.NullPointerException),可能是因为 PasswordUnlockScreen 不是t 在应用程序级别。
  • 代码太长,无法粘贴。基本上,当验证失败时,我将 Toast 放入 verifyPasswordAndUnlock() 函数中。
  • 这是您的回复 [100% 测试][1] [1]:stackoverflow.com/questions/11257691/…

标签: android toast


【解决方案1】:

正如已经说过的,问题可能不在于上下文。我猜您正在使用实际的 PasswordUnlockScreen 源,而不是对其进行子类化?如果是这样,您可以尝试使用它的KeyguardStatusViewManager 来显示您的文字:

mStatusViewManager.setInstructionText("Invalid password");

【讨论】:

  • 谢谢。我正在研究 Gingerbread 源代码,但似乎我没有 KeyguardStatusViewManager,所以那行代码不起作用。在这种情况下还有其他显示消息的方式吗?
  • 我查看了 Gingerbread 源代码,似乎他们只使用标题文本视图来显示文本 (mTitle.setText(...))。实际上看起来KeyguardStatusViewManager(在4.0.1及更高版本中)也只是修改了现有的TextView,唯一的区别是它在超时后重置为原始值。
  • 是的,似乎是这样。我想唯一的方法是在布局中添加另一个 TextView。现在试试……
【解决方案2】:

所有视图都有 mContext 字段,该字段已初始化为上下文。

Toast.makeText(mContext, "Invalid password", Toast.LENGTH_LONG).show();

【讨论】:

  • 不幸的是,PasswordUnlockScreen 似乎没有 mContext。您可以查看codeaurora.org/git/projects/qrd-gb-ssss-7225/repository/… 的代码,奇怪的是,如果我使用 mContext,它会构建,但我遇到了同样的问题。我应该在构造函数中添加代码以将 mContext 初始化为上下文吗?
  • 所有视图都有 mContext 并且 PasswordUnlockScreen 是一个视图。所以问题不是因为你使用了错误的上下文,我猜 Toast 永远不会显示在 LockScreen 的顶部,你必须创建自己的 SYSTEM_ALERT_WINDOW 类型的对话框
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 2015-11-26
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多