Introduction

常常我们开

发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏

功能启动,既不想锁频,然而系统却在我们看电视或者视频的时候出来个锁屏的界面进行锁频拉,我们还要想继续看的话还要去解锁,这样好麻烦,不是我们想要

的,那我们该怎么做呢,其实很简单,我这里只讲其中的两种

:我们只要在程序中用代码实现。代码如下:

//方法一

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main);

//方法二

@Override

protected void onResume() {

super.onResume();

pManager = ((PowerManager) getSystemService(POWER_SERVICE));

mWakeLock = pManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK

| PowerManager.ON_AFTER_RELEASE, TAG);

mWakeLock.acquire();

}

@Override

protected void onPause() {

super.onPause();

if(null != mWakeLock){

mWakeLock.release();

}

}

//方法三

public void unLock(){

mContentResolver = getContentResolver();

//不建议使用

//setLockPatternEnabled(android.provider.Settings.System.LOCK_PATTERN_ENABLED,false);

//推荐使用

setLockPatternEnabled(android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);

}

private void setLockPatternEnabled(String systemSettingKey, boolean enabled) {

//不建议使用

//android.provider.Settings.System.putInt(mContentResolver,systemSettingKey, enabled ? 1 : 0);

//推荐使用

android.provider.Settings.Secure.putInt(mContentResolver, systemSettingKey,enabled ? 1 : 0);

}

//但注意要加权限AndroidManifest.xml文件中加入

//

//还要特别注意的是要加入 android:sharedUserId="android.uid.system",但有一个问题,

//如果加入了sharedUserId后就不能使用eclipse编译了,一定要手动通过 mm -B进行编译,然后把apk install到模拟器或设备中

二:禁用系统的锁频功能,这方法不建议使用,只有在设当的环境下适当使用既可,我们只要知道这样我们也可以达到这样的功能实现就OK。

我们知道Android系统的锁屏时间存放在Setting数据库中,字段为Settings.System.SCREEN_OFF_TIMEOUT。我们可以查看SettingsProvider源码,查看如下文件的源码如下:

~/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

查看loadSystemSettings()函数的代码如下

private void loadSystemSettings(SQLiteDatabase db) {

SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"

+ " VALUES(?,?);");

Resources r = mContext.getResources();

loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,

R.bool.def_dim_screen);

loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,

"1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);

loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,

R.integer.def_screen_off_timeout);

// Set default cdma emergency tone

loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);

// Set default cdma call auto retry

loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);

// Set default cdma DTMF type

loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);

// Set default hearing aid

loadSetting(stmt, Settings.System.HEARING_AID, 0);

// Set default tty mode

loadSetting(stmt, Settings.System.TTY_MODE, 0);

loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,

R.bool.def_airplane_mode_on);

loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,

R.string.def_airplane_mode_radios);

loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,

R.string.airplane_mode_toggleable_radios);

loadBooleanSetting(stmt, Settings.System.AUTO_TIME,

R.bool.def_auto_time); // Sync time to NITZ

loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,

R.integer.def_screen_brightness);

loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,

R.bool.def_screen_brightness_automatic_mode);

loadDefaultAnimationSettings(stmt);

loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,

R.bool.def_accelerometer_rotation);

loadDefaultHapticSettings(stmt);

stmt.close();

}

我们通过查看源码便知道,

Settings.System.SCREEN_OFF_TIMEOUT没有初始化的话(系统首次启动,这个字段肯定是没

有初始化的),系统将会利用资源中的R.integer.def_screen_off_timeout来初始化。我们为了让系统永不锁屏,只需要把资源

R.integer.def_screen_off_timeout设为-1即可。查看文件在这里:

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

可以找到R.integer.def_screen_off_timeout的定义

60000

发现默认值为60000ms,也就是60s。我们只需要把这个参数改为-1。然后重新编译SettingsProvider模块,就OK了。

但有时候也会有这样的情况发生,用户进入系统后,修改锁屏时间,为了这样的情况发生我们得在Setting模块中删除对锁屏时间的设置。这样Android设备就不锁屏了。

我们这里还要处理一种情况,就是让系统一启动我们就禁用锁屏的功能,很简单,我们只要把系统锁

功能的的初始默认开关给改以下就可以了,如下找到这个类:

frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java

该文件中有一个变量定义如下:

/**

* External apps (like the phone app) can tell us to disable the keygaurd.

*/

private boolean mExternallyEnabled = true

mExternallyEnabled是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个

值,我们可以把这个值改成false就可以了。

有时候我们不想修改这个初始值,那我们看看这个类有没有提供相应的方法来供外部修改这个值的,不出我们所料,看下面这段代码就是的了:

/**

* Same semantics as {@link WindowManagerPolicy#enableKeyguard}; provide

* a way for external stuff to override normal keyguard behavior. For instance

* the phone app disables the keyguard when it receives incoming calls.

*/

public void setKeyguardEnabled(boolean enabled) {

synchronized (this) {

if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");

mExternallyEnabled = enabled;

if (!enabled && mShowing) {

if (mExitSecureCallback != null) {

if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");

// we're in the process of handling a request to verify the user

// can get past the keyguard. ignore extraneous requests to disable / reenable

return;

}

// hiding keyguard that is showing, remember to reshow later

if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "

+ "disabling status bar expansion");

mNeedToReshowWhenReenabled = true;

hideLocked();

} else if (enabled && mNeedToReshowWhenReenabled) {

...

...

}

}

我们可以在我们需要修改这个值的地方来调用这个函数去修改,挺简单的吧,OK,锁频就讲到这里,其实锁屏这块还有挺多的知识点.

要想深入的了解其实挺麻烦的,如果大家对锁频有了个比较深入的了解的话,可以尝试自己开发一个琐屏的程序看看。

android app防止锁屏_Android 禁止屏幕休眠和锁屏的方法 | 学步园相关推荐

  1. android app防止锁屏_Android 禁止屏幕休眠和锁屏的方法

    常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏 功能启动,既不想锁频,然而系统却在我们看电 ...

  2. Android 禁止屏幕休眠和锁屏的方法

    Introduction 常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏 功能启动,既不想 ...

  3. 手机投屏不是全屏怎么办_怎么解决投屏到大屏幕不是全屏问题

    怎么解决投屏到大屏幕不是全屏问题 关于用户的反馈,笔记本.PC电脑.手机.平板等设备在通过无线投屏器投影在投影仪上,会出现不能全屏问题.暂时还没有接到一体机用户的反馈. 为什么会出现投屏到大屏幕不全屏 ...

  4. android手机禁止休眠_Android应用禁止屏幕休眠的3种方法

    做Android应用开发时,有时需要在应用前台运行时,禁止休眠,以下几种方法供参考. 方法一:持有WakeLock 添加休眠锁,休眠锁必须成对出现. private WakeLock mWakeLoc ...

  5. android 屏幕禁止,Android应用禁止屏幕休眠的几种方法

    做Android应用开发时,有时需要在应用前台运行时,禁止休眠,以下几种方法供参考. 方法一: 添加休眠锁,休眠锁必须成对出现. private WakeLock mWakeLock; private ...

  6. win10无线投屏_Win10电脑屏幕分割成四分屏投屏测试

    Win10电脑屏幕分割成四分屏投屏测试 昨天下午小编趁双十一购买的多屏显卡到手了,赶紧装在电脑上,配上我们[AWIND奇机]的无线投屏器,将Win10电脑屏幕分割成四分屏,然后在分别投屏. 硬件准备: ...

  7. 计算机桌面怎么全屏显示,电脑显示器如何设置全屏 把电脑屏幕调成满屏的方法有哪些...

    今天给大家带来电脑显示器如何设置全屏,把电脑屏幕调成满屏的方法有哪些,让您轻松解决问题. 现在很多人都使用电脑玩游戏,为了让游戏效果达到最好,很多人都会购买比较好的显示器,设置电脑全屏进行玩耍,下面是 ...

  8. 关闭后天 树莓派_树莓派显示器电源管理禁止屏幕休眠

    下面我们介绍当需要用到树莓派的显示屏作为演示或监视器的时候,禁止长时间无响应屏幕休眠的方法.区分两种情况: 一.禁止屏幕在图形界面下休眠 在 /etc/profile.d 路径下新建一个文件,如Scr ...

  9. android app中如何获取电源锁保持屏幕常亮

    android 中电源锁有 wakeLock 和  FLAG_KEEP_SCREEN_ON 这两种. 如果你想在你的应用中一进来就使屏幕保持常亮,并且不随系统亮度发生变化(一般应用都是你进去以后不操作 ...

最新文章

  1. CPlus的简单线程的制作
  2. python中的pass语句_Python中pass的作用与使用代码示例
  3. 通配符 不是jpg 结尾文件_Struts(十九)- 使用使用通配符匹配
  4. 以太坊测试链环境node.js版本
  5. 进程的三个状态的转换
  6. Lifetime of Objects
  7. 学习AJAX,解析XMLHttpRequest对象
  8. java初学者必看经典
  9. vue-cli入门(四)——vue-resource登录注册实例
  10. PCRE demo【转】
  11. fill函数 神奇的迭代器
  12. JavaScript 基础(超详细)
  13. Idea查看 破解码
  14. 一起学爬虫(Python) — 19 年轻人,进来学自动化
  15. 支付宝手机网站支付详细流程
  16. npm install报错的一天
  17. excel隔行填充颜色的三种方法
  18. JAVA——从基础学起(五)类和对象
  19. 蓝鲸智云App应用部署(完整版)
  20. 给大家推荐一个进阶直播课,免费的!

热门文章

  1. 监控之星-普罗米修斯Prometheus搭建
  2. 普歌--前端 vue-element-admin 实现第三方(无账号密码)登录
  3. 基于Python运动场地预约系统设计与实现 开题报告
  4. C语言 | 自由落地,求第10次落地共经过多少米
  5. win32 009 masm32
  6. 智慧工厂用到的技术_智慧工厂如何实现智能化
  7. PCL:点云平移、旋转
  8. Shell | 查询IP
  9. Qt QString 增、删、改、查、格式化等常用方法总结
  10. 【OpenGL】使用MinGW下gcc编译OpenGL的glut和freeglut库