灭屏状态下,来短信点亮屏幕后自动灭屏的处理流程是?

ameyume
博客专家认证
2012-07-17 06:47:53
待机灭屏状态下,接收到短信点亮屏幕,无操作5秒或者10秒钟灭屏是如何处理的?
处理流程是在怎样的呢?
多谢指点。
...全文
392 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2012-07-18
  • 打赏
  • 举报
回复
自动灭屏的时间为5秒或者10秒:
暂时没有发现什么好办法,建议LZ查下是否存在使手机立即进入休眠状态的API.

来短信后屏幕点亮但并没有解锁:
如果不解锁,使用FULL_WAKE_LOCK亮屏之后,需要关闭这个锁,然后换一个不亮屏的锁PARTIAL_WAKE_LOCK,不然不会灭屏的。主要hold住FFULL_WAKE_LOCK,屏幕就不会灭。
ameyume 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
2L的操作是一个屏幕唤醒并保持操作,当不再需要持续唤醒时,也就是允许正常休眠时,需要把该锁释放。

如果需要在释放WAKE_LOCK后,5~10秒内自动锁屏,需要设置系统自动锁屏时间为5~10秒之间的一个确定值。不同的机型自动锁屏时间设置效果可能会不一样。
[/Quote]
多谢,如果设置系统屏幕超时的时间是1分钟,而又要求来短信后自动灭屏的时间为5秒或者10秒(来短信后屏幕点亮但并没有解锁)。
这时候该怎么做?
ameyume 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
2L的操作是一个屏幕唤醒并保持操作,当不再需要持续唤醒时,也就是允许正常休眠时,需要把该锁释放。

如果需要在释放WAKE_LOCK后,5~10秒内自动锁屏,需要设置系统自动锁屏时间为5~10秒之间的一个确定值。不同的机型自动锁屏时间设置效果可能会不一样。
[/Quote]
多谢,如果设置系统屏幕超时的时间是1分钟,而又要求来短信后自动灭屏的时间为5秒或者10秒(来短信后屏幕点亮但并没有解锁)。
这时候该怎么做?
hslinux 2012-07-18
  • 打赏
  • 举报
回复

2L的操作是一个屏幕唤醒并保持操作,当不再需要持续唤醒时,也就是允许正常休眠时,需要把该锁释放。

如果需要在释放WAKE_LOCK后,5~10秒内自动锁屏,需要设置系统自动锁屏时间为5~10秒之间的一个确定值。不同的机型自动锁屏时间设置效果可能会不一样。
ameyume 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

自动灭屏的时间为5秒或者10秒:
暂时没有发现什么好办法,建议LZ查下是否存在使手机立即进入休眠状态的API.

来短信后屏幕点亮但并没有解锁:
如果不解锁,使用FULL_WAKE_LOCK亮屏之后,需要关闭这个锁,然后换一个不亮屏的锁PARTIAL_WAKE_LOCK,不然不会灭屏的。主要hold住FFULL_WAKE_LOCK,屏幕就不会灭。
[/Quote]
现在的sms中获取锁的代码用的就是PARTIAL_WAKE_LOCK,但是不起作用。
同样的代码在另外一个版本上就起作用,与系统设置的屏幕超时无关,接收到短信后10秒就会灭屏,可能还是framework层的处理有问题。
ameyume 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

收到短信的server onCreate的时候 mWakeLock 复赋值

Java code
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
……
[/Quote]
我曾经试过把调用acquire函数加参数5000ms,但不起作用。
acquire(long timeout)函数,在指定的timeout时间到时候,执行mReleaser的run函数,在run函数中又执行了release()函数,release()函数又调用了release(int flags)函数,可能是在release(int flags)函数中
(!mRefCounted || --mCount == 0)条件不满足,没有执行mService.releaseWakeLock(mToken, flags);导致的,还需要再确认下。
ameyume 2012-07-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

收到短信的server onCreate的时候 mWakeLock 复赋值

Java code
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
……
[/Quote]
多谢。
mWakeLock.acquire(5000); 这个是占用cpu的时间吧?过了这个时间就释放cpu锁了,不一定会灭屏吧?
zack_c 2012-07-17
  • 打赏
  • 举报
回复
收到短信的server onCreate的时候 mWakeLock 复赋值

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, TAG);


在短信received的时候

mWakeLock.acquire(5000);

5000就是5秒.

不知道这个是否是你需要的,如果是要更深的研究这几个函数怎么工作的,那估计得再研究下...

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧