常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做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) {

...

...

}

}

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

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

    Introduction 常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做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. pandas最大的时间间隔_pandas计算最大连续间隔的方法
  2. ubuntu copy命令
  3. Cocoa Touch国际化
  4. C++学习 —— 灵活的继承特性【C++不是玩具,而是生产工具】
  5. php列表调多图,列表中调用多图显示的文章
  6. java对象的内存结构_Java对象在内存中的结构分析
  7. Spring的ioc操作 与 IOC底层原理
  8. Linux系统下常用的帮助man,whatis,info,help总结
  9. 在虚拟机、Mac 电脑和旧电脑上绕过 TPM 安装 Windows 11 的方法总结(提供通用无 TPM 检测镜像下载)
  10. uni-app 小程序跳转微信小程序及APP端(安卓/ios)
  11. java即时通讯_java实现即时通信的完整步骤分享
  12. IIS:CS0016: 未能写入输出文件
  13. 阿里巴巴社招Java面试题做题记录
  14. 活动倒计时的一些想法
  15. 优化 | Pick and delivery problem的简介与建模实现(二)
  16. 蓝桥杯 算法训练 Beaver's Calculator
  17. 设计-由OOiNN设计师精心设计的每一个姓氏的印章
  18. 基于Neo4j的关联数据评估风险投资人业绩
  19. 计算机速成课 第三集 布尔逻辑和逻辑门
  20. 小人再狡猾也斗不过老江湖,辨别小人就看这三个地方,说得真准

热门文章

  1. [CF1616H]Keep XOR Low / [CF_GYM102331B]Bitwise Xor
  2. 手机图片压缩大小的方法,用什么软件压缩
  3. ppt怎么转换为pdf
  4. 正点原子gt9xx系列linux驱动移植
  5. linux添加扩展gpio,嵌入式Linux工控板的ISA总线GPIO扩展
  6. 与谷歌AI领军科学家一较高下的梦想如何反应了中国对科技突破的追求?
  7. css3 实现元素 弧线运动
  8. yolov5笔记(2)——训练自己的数据模型(随6.0更新)
  9. FPGA接口-PMOD,FMC与SYZYGY
  10. 两个三维向量的夹角计算