Android 屏幕控制

一、Android亮屏和熄屏控制

1.  前言
我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏。那么今天,我们来分析下这方面的功能。

2.  系统服务 --- PowerManager.java
  顾名思义,PowerManager.java就是管理我们电源方面的功能的,当然也包括我们屏幕的亮和熄灭。没错,我们的应用程序就是通过这个系统服务来实现亮屏和熄屏的功能的。
a.  应用程序获取PowerManager服务, 我们可以这样书写:
     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
     因为PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们。
b.  goToSleep()方法, 这个方法可以强制我们的屏幕熄屏。我们可以这样调用:
     在上面拿到pm对象之后,这样调用 pm.goToSleep(SystemClock.uptimeMillis());
c.  setBacklightBrightness()方法,这个方法可以设置背光的亮度,从0-255 

3.  定时熄灭屏幕
那么这里,还可以介绍一个控制屏幕的方法就是PowerManager.WakeLock
顾名思义,WakeLock这个东西就是亮屏控制,这里说的亮屏,它定义了几种类型的亮屏。如下:

类型

cpu

屏幕

键盘

PARTIAL_WAKE_LOCK

on

off

off

SCREEN_DIM_WAKE_LOCK

on

dim

off

SCREEN_BRIGHT_WAKE_LOCK

on

Bright

off

FULL_WAKE_LOCK

on

Bright

Bright


由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长(大家都知道,智能手机的电池问题是一个硬伤, 每天一充电,有木有? 别人说用安卓手机的男人都是顾家好男人,因为他每天晚上都要回家充电。。^^).
怎么使用这个WakeLock呢?我们可以这样写:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");  
wakeLock.acquire();  
//做我们的工作,在这个阶段,我们的屏幕会持续点亮
//释放锁,屏幕熄灭。
wl.release();

那么这里我们也可以这样使用,就是多少时间后熄灭屏幕
首先点亮屏幕
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");  
wakeLock.acquire();  
然后
mTimeHandler.postDelayed(new Runnable(){
                public void run(){
                    wakeLock.release();
                }
            }, 10*1000);
嗯,延迟10s后熄灭屏幕。。。。
那么,这里要注意的是acquire()和release()要成对调用哦!也就是说,你申请了亮屏,过段时间,你要是释放它

 

二、

保持屏幕常亮的两种方法

   我们大家在用手机的时候,会遇到这样的一个问题,就是想让我们的手机屏幕一直亮着怎么办。大家会想到的是,在手机设置里有一个不省电模式,选择这个就可以了,但是我们要在代码中是怎么样办那,有两种方法就可以解决这个问题。

 

第一种方法:

大家想一想,我们在android里那个地方老是常定义权限呀,有了这个提示,大家就会想到是哪个文件了吧,AndroidManifest.xml:我们要在这个文件里定义一下权限就可以实现我们的手机屏幕保持常亮了。这个方法也是最简单的一个方法,那么我们下面就来看看它的代码:



Java代码:


01.<uses-permission android:name="android.permission.WAKE_LOCK" /> 


01.PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
02.PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 
03.// in onResume() call
04.
05.mWakeLock.acquire(); 
06.// in onPause() call 
07.mWakeLock.release();

我们再在main代码中写上PowerManager.SCREEN_DIM_WAKE_LOCK,这个是我们android系统提供给我们的,我们要把它用上,这句代码的意思是长亮的意思,这样我们就可以实现了,因为我们在上面已经定义了权限。这样我们就有权利使用这个长亮属性。这就是第一种方法。

 

第二种方法:

第二种我们不怎么常用,但有的时候我们也能用得到,我们就来讲讲这第二种方法吧。这种方法我们就在main代码中做一个方法,这个方法就是onCreate(Bundle icicle)我们要在括号里写上参数,这样我们才可以用这个参数,我们在super.onCreate(icicle);这个句的意思就是得到参数,我们也就是实现完了,最后我们在找到LayoutParams.FLAG_KEEP_SCREEN_ON这个android系统提供给我们的属性,这样我们第二个方法就完事了,这个方法就是不用在AndroidManifest.xml:里定义权限了。这样也不比较麻烦,但有时会把参数给忘了,这个是重点,因为这样我们也实现不了效果,这么说的,两个方法有利有弊,用的时候就要看开发者自己的喜好了,喜好哪个就用哪个。


Java代码:


01.@Override 
02.protected void onCreate(Bundle icicle) { 
03.super.onCreate(icicle);
04.
05.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
06.}


补充一下创建锁时flag的值及意义:


int flags 
各种锁的类型对CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK :保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK :保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK :保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度



三、android 设置横屏竖屏

  在android应用开发过程中,尤其是在界面布局当中,经常会碰到要指定布局为横屏或是竖屏显示,下面是一些设置android横竖屏的方法:

1、代码控制

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式  

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏  

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 

 

2、xml控制

在activity里设置android:screenOrientation的值。
android:screenOrientation 的属性有以下值:
unspecified (默认值,由系统判断状态自动切换),The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.
landscape ,横屏
portrait ,竖屏
user (用户当前设置的orientation值),The user's current preferred orientation.
behind (下一个要显示的Activity的orientation值),The same orientation as the activity that's immediately beneath it in the activity stack.
sensor (传感器的方向),The orientation determined by a physical orientation sensor. The orientation of the display depends on how the user is holding the device; it changes when the user rotates the device.
nosensor (不使用传感器,这个效果差不多等于unspecified).An orientation determined without reference to a physical orientation sensor. The sensor is ignored, so the display will not rotate based on how the user moves the device. Except for this distinction, the system chooses the orientation using the same policy as for the "unspecified" setting.

 

 

 

 

 

 

3、一个多Activity项目,怎么设置全部横屏

<activity android:name="myAcitivty" android:screenOrientation="landscape"/ // 或者 “portrait”方式2:代码实现setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
获取横屏方向

的常用取值可以为ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE(横屏) 或ActivityInfo.SCREEN_ORIENTATION_PORTRAIT(竖屏)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值