如果Android应用程序没有使用,如何在应用程序中设置屏幕保护程序

3
我创建了一款安卓应用程序,屏幕始终保持开启状态。
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

现在我想要在屏幕未被按压5分钟或其他情况下显示一张图片。当按压图片时,应用程序不应该关闭,而是应该打开。

我该如何实现这个功能?


“我该如何实现这个?” -- 你需要什么具体的帮助呢?例如,要显示一张图片,可以使用 ImageView - CommonsWare
我正在搜索一个事件,当Android系统告诉我的应用程序用户没有采取任何行动。 - Jan Knoblauch
2个回答

4
我建议你不要采用这种方法。用户希望在设备上的各种应用程序之间具有一致的用户体验,并且可能已经对他们的设备休眠方式有偏好,无论是通过指定休眠超时还是 在Android 4.2中引入的显示日梦

如果您想为用户提供显示与您的应用相关联的屏幕保护程序的选项,我建议在您的应用中包含一个Daydream并确认用户的偏好。

话虽如此,如果您不能使用Daydream,则可以观察应用程序是否正在使用。有两件事情值得注意:

  1. 让您的活动的根视图拦截触摸事件以观察其任何子项是否被触摸。
  2. 观察活动的 onPause()onResume() 来确认该活动仍在显示。
你可以通过使用postDelayed(Runnable action, long delayMillis)将一个Runnable发布到视图中,然后在活动暂停或计时器需要重置时小心地删除它,使用removeCallbacks(Runnable)

1
不用担心用户,该应用程序正在公共场所的平板电脑上运行!但是这些平板电脑正在运行Android 2.2,因此没有Daydream.. - Jan Knoblauch
这将是一个可接受的用例!我已经更新了答案并提出了建议。 - Paul Lammertsma
我尝试了很多在布局上设置OnTouchListener的示例,但如果我按下像按钮这样的东西,它不会注册。 - Jan Knoblauch
你很可能通过返回 true 来消耗触摸事件。 - Paul Lammertsma
在我的RelativeLayout的OnTouchListener中返回true或false都不会改变任何东西。 - Jan Knoblauch
对不起,我误解了。你应该查看onInterceptTouchEvent(),而不是正常的onTouchEvent(),因为后者会将事件沿着错误的方向传播,与你的方法不符。 - Paul Lammertsma

0

我解决了这个问题!!!

我使用了那个事件:

    public boolean dispatchTouchEvent(MotionEvent ev) 
    {

        super.dispatchTouchEvent(ev);

        // cancel my Timer

        return true;

    }

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接