android - 如何创建在锁定屏幕顶部可见的 Activity

标签 android locking wakeup

我在屏幕锁定时收到传入的 C2DM 通知。我想唤醒屏幕并使用 Activity 在锁定屏幕顶部显示通知消息。我正在从我的 C2DM BroadcastReceiver 启动通知 Activity ,如下所示:

Intent new_intent= new Intent().setClass( context, EIAlertDialog.class );           
new_intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );      
new_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );      
context.startActivity( new_intent );

在通知 Activity 的 onCreate 方法中,我按如下方式唤醒屏幕:

PowerManager powerManager= (PowerManager)getSystemService( Context.POWER_SERVICE );
if (!powerManager.isScreenOn()) {
    mWakeLock= powerManager.newWakeLock(
                   PowerManager.FULL_WAKE_LOCK |
                   PowerManager.ACQUIRE_CAUSES_WAKEUP, 
                   "My Tag" )
    mWakeLock.acquire();
}

屏幕被唤醒,但在我解锁屏幕之前,通知 Activity 是不可见的。

我意识到我可以使用下面的代码避免锁定屏幕,但这是不希望的。我希望用户解锁手机,前提是他/她有兴趣阅读/回复通知。

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

最佳答案

据我所知这是不可能的。听起来您正在尝试复制 iOS 体验。您应该意识到 android 有自己的约定,您不能轻率地违反它们。

Android 有点矛盾。它非常开放,作为开发人员,您可以访问任何东西,使用这些权力行善或作恶完全取决于您。当我说邪恶时,我并不是指恶意软件。我的意思是那些试图变得可爱并以不应该使用的方式使用东西的应用程序,比如发出通知,要求您更多地使用该应用程序。矛盾在于您实际上无法访问所有内容,开发人员认为有几个部分非常重要,以至于应用程序无法与它们混淆。锁屏就是其中之一。您可以随心所欲地更换您的家庭应用,但您永远不必担心更换锁屏失败并阻止您访问手机。

即使这是可能的,你也会有更多的问题需要处理。每个锁定屏幕都是不同的,制造商可以并且确实会对其进行自定义,因此您无法保证您的 Activity 不会妨碍解锁手机。

关于android - 如何创建在锁定屏幕顶部可见的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009602/

相关文章:

android - 如何在 Android Studio 中使用 Doxygen 插件?

java - cursor.getColumnIndexOrThrow() 抛出 NullPointerException

c# - ReaderWriterLockSlim 阻塞读取,直到所有排队的写入完成

Python - python 守护程序锁定文件在 lock.acquire() 上超时

c++ - 检查一定数量的线程是否已完成的任何方法

android - 重新安装应用程序后有时无法释放相机

Android:如何打开 sleep 时启动的对话框?

android - android如何安排设备从休眠状态唤醒?

ios - 有没有办法在没有用户或服务器干预的情况下唤醒 iOS 中暂停的应用程序

android - 将复选框添加到单选集 AlertDialog