Android亮屏、熄屏的时候会发出广播,通常在熄屏广播中启动屏保

注册屏幕广播

/**

* 注册广播

*

* @param mContext 上下文环境

* @param receiver 将要注册的广播

*/

public void registerScreenSaverReceiver(Context mContext, ScreenReceiver receiver) {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_OFF);

filter.addAction(Intent.ACTION_SCREEN_ON);

mContext.registerReceiver(receiver, filter);

}

在该广播的Action中有着这样的注释:

/**

* Broadcast Action: Sent when the device wakes up and becomes interactive.

*

* For historical reasons, the name of this broadcast action refers to the power

* state of the screen but it is actually sent in response to changes in the

* overall interactive state of the device.

*

* This broadcast is sent when the device becomes interactive which may have

* nothing to do with the screen turning on. To determine the

* actual state of the screen, use {@link android.view.Display#getState}.

*

* See {@link android.os.PowerManager#isInteractive} for details.

*

* You cannot receive this through components declared in

* manifests, only by explicitly registering for it with

* {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)

* Context.registerReceiver()}.

*

*

This is a protected intent that can only be sent

* by the system.

*/

这就是说,由于历史原因,该广播Action表示屏幕的电信号状态,但是实际上该广播是在屏幕不可进行交互时发出

注:不能通过在Manifest.xml文件注册的方式接收该广播,仅仅支持通过代码registerReceiver(Broadcast ,IntentFilter)的方式进行注册

在 onReceive(Context context, Intent intent) 方法中进行开启自定义屏保:

public class ScreenReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

//拿到屏幕锁,亮屏,随即释放,否则屏幕就会保持常量

WakeUtil.getInstance().wakeScreenLock();

WakeUtil.getInstance().releaseScreenLock();

//屏蔽系统的屏保

mKeyguardManager = (KeyguardManager) MyApplication.getInstance().getSystemService(Context.KEYGUARD_SERVICE);

mKeyguardLock = mKeyguardManager.newKeyguardLock("ScreenLockService");

mKeyguardLock.disableKeyguard();

//TODO 开启自定义的屏保;例如:跳转一个Activity,显示屏保图片

}

}

保持屏幕常量

通常,保持屏幕常量有如下方法:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

官方注释:

/** Window flag: as long as this window is visible to the user, keep the device's screen turned on and bright. */

public static final int FLAG_KEEP_SCREEN_ON = 0x00000080;

即当window对用户可见时,保持屏幕常量。

通过PowerManager.WakeLock

mScreenWakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK,

this.getClass().getCanonicalName());

if (!mScreenWakeLock.isHeld()) {

mScreenWakeLock.acquire();

}

对于方法newWakeLock(int levelAndFlags, String tag),下面看看该flag和level分别代表什么意义。

PowerManager.ACQUIRE_CAUSES_WAKEUP|PowerManager.SCREEN_DIM_WAKE_LOCK

/**

* 获得唤醒锁时亮屏

*

* 正常情况下,唤醒锁并不能真正唤醒设备,一旦屏幕已经打开,它们就只能继续工作。

* 正如视频软件正常工作一样。

*

*/

public static final int ACQUIRE_CAUSES_WAKEUP = 0x10000000;

/**

* 保证亮屏状态 (可能会变暗);

* 允许关闭背光

* @deprecated Most applications should use

* {@link android.view.WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON} instead

* of this type of wake lock, as it will be correctly managed by the platform

* as the user moves between applications and doesn't require a special permission.

*/

@Deprecated

public static final int SCREEN_DIM_WAKE_LOCK = 0x00000006;

可以看出该方法已经过时,系统更推荐使用方法1.

3.通过设置系统进入屏保的时间

try {

Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, paramInt);

} catch (Exception localException) {

localException.printStackTrace();

}

paramInt代表进入屏保或锁屏的时间,单位毫秒ms。这里可设置为Integer.MAX_VALUE。

同样可以通过这种方式进行屏幕亮度(0-255)等的设置:

try {

Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, paramInt);

} catch (Exception localException) {

localException.printStackTrace();

}

进入浅休眠(熄屏状态下CPU仍在运行)

mCpuWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName());

synchronized (WakeUtil.class) {

if (!mCpuWakeLock.isHeld()) {

mCpuWakeLock.acquire();

}

}

android自定义屏幕,Android自定义屏保相关推荐

  1. android 手机屏幕横屏竖屏切换

    第一篇博客哦~ 本例子是实现简单的屏幕横竖切换的. 主要知识点: getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRA ...

  2. Android 实现屏幕的亮屏与锁屏

    最近做的电子班牌需要早上7点开启,晚上8点关闭的功能,之前倒是没有接触过这类的东西,所以早上研究了一上午,赶紧记录下来 第一步:先申请权限 <!-- 屏幕唤醒 --> <uses-p ...

  3. Android 11.0 Settings增加屏保功能(屏保时间必须小于休眠时间)

    1.概述 在11.0的定制化产品的需求的需要 要求增加屏保功能,设置屏保前提必须是是需要设置休眠时间大于屏保时间,当屏保时间大于休眠时间时,休眠以后 屏保功能就无效,所以就必须设置好屏保时间 最终效果 ...

  4. Android 扩展屏幕 实现主屏副屏同步或者异步显示

    android的扩展屏幕是通过Presentation 类实现的. Presentation继承自  Dialog. 主屏显示的代码 主屏播放一个video3的视频 .video3在项目的 asset ...

  5. android平分屏幕,Android GridLayout中元素平分且行充满屏幕(计算器的界面效果)

    有时候我们想用GridLayout做类似计算器的效果,可是看起来的效果确实这么的糟糕,如下图: 可是上图的每个元素都没有做到平分屏幕的1/4, 看起来很丑是吧!, 经过修改之后的效果图如下: 原理: ...

  6. linux6禁用屏幕保护程序,彻底关闭屏幕保护程序的方法避免长时间不动屏幕会生成屏保...

    有的朋友听说电脑的屏幕保护程序有具有省电的作用,还可以保护我们的显示器,所以有的朋友就设置了屏幕保护程序. 但是设置完后朋友发现看一部电影,长时间不动屏幕就会生成屏保,要一次有一次晃动鼠标,非常麻烦. ...

  7. android解锁屏幕大师,锁屏这样玩才高端 应用推荐《锁屏大师》

    即便是没事干也要拿起手机按下电源键,解个锁,再按下电源键.应该很多朋友都干过这样的事,足见锁屏界面是一个与大家日常使用手机打交道最多的地方,既然使用频率高自然就有大做文章的地方. 通常从锁屏状态下到打 ...

  8. 带android小绿人的屏保相册,盘点:那些年我们追过的Android

    Android小绿人将在今年十一月份度过第五个生日.而在最新的Android操作系统果冻豆到来之前,还是让我们来回顾一下以前的版本,追忆Android已经走过的岁月. 在正式形成规模效应之前,Andr ...

  9. Android 保持屏幕不熄屏

    1.在AndroidManifest.xml中添加权限 <uses-permission android:name="android.permission.WAKE_LOCK" ...

最新文章

  1. 隔离见证地址区别_科普:比特币钱包的隔离见证地址与普通地址有何区别?
  2. GPUImage滤镜之锐化
  3. 人终究要活出自己对于这个世界的看法和自己的处事方式,并且由内而外的生成自信
  4. JavaScript实现k-Means算法(附完整源码)
  5. 颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?
  6. Apache Camel教程– EIP,路由,组件,测试和其他概念的简介
  7. mongodb mysql配置_Nosql_MongoDB数据库配置以及基本指令
  8. git游戏githug
  9. 一个前端的入行故事,零基础,2个月自学入门前端,半年从外包进淘宝
  10. Java设计模式之单例模式(七种写法)
  11. pytorch forward
  12. C# 调用mschart控件
  13. 计算机专业的宣传,计算机专业招生宣传口号
  14. Traceback (most recent call last):
  15. 用 dfuse Lifecycle 保证你的交易被推送上链
  16. 高精度地图2019-2020年或可落地
  17. 鸡的开口药如何选择 什么药防治鸡开口病最快
  18. 一个大二老学长的迷茫之路
  19. Invalid value for option“watch“:expected anObject,but got Function.
  20. django问卷html,Django:动态问卷系统的Model设计

热门文章

  1. Android与iOS/WP8跨平台整合设计与开发_专栏
  2. Java爬取网页源代码解析
  3. GitHub 的替代品(国内版)
  4. 转移指令的原理01 - 零基础入门学习汇编语言43
  5. Linux 命令(69)—— objcopy 命令
  6. windows 运行banana
  7. 2014.7.7模拟赛【无线通讯网】
  8. ajax跨域请求 html5,HTML5中使用postMessage实现Ajax跨域请求的方法
  9. 高中选的美术将来能考计算机学校吗,北京中考美术考上美术高中以后上考大学一定要考美术专业的大学?好考美术高中...
  10. 大数据架构师工作内容有哪些?