- 浏览: 283556 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
wakikyou320:
楼主能否共享jar包呢?都木找到额
Android应用开发中如何使用隐藏API -
ihopethatwell:
注释/etc/apt/sources.list中 #deb h ...
ubuntu安装android 2.3 -
qq123zhz:
有wma和mp3的吗?
JAVA 读取 ASF(WMA 和 WMV)文件信息 -
zhmeup:
doveqian 写道
朋友:将android 2.3的set ...
debug调试setting源码 -
doveqian:
帮忙下:doveqian@163.com
debug调试setting源码
锁定屏幕对于移动终端来说是非常有必要的,但是对于机顶盒产品就没有这个必要了。所以本文介绍一下怎样让Android设备永不锁屏。
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的定义。
<integer name="def_screen_off_timeout">60000</integer>
发现默认值为60000ms,也就是60s。我们只需要把这个参数改为-1。然后重新编译SettingsProvider模块,就OK了。
另外为了防止用户进入系统后,修改锁屏时间,在Setting模块中删除对锁屏时间的设置。这样Android设备就永不锁屏了。
后来发现我的Android设备烧录好之后第一次启动永远不会锁屏,但是设备重启之后开机就进入锁屏状态,解锁之后就再也不会锁屏了(因为永远不超时)。看来“革命尚未成功,同志仍需努力”啊。
那么为什么启动之后没有进入锁屏状态呢?是不会系统有把超时锁屏的值给修改了呢?我通过sqlite3去查看settings.db的内容,发现超时锁屏的值仍然是-1。说明启动之后,系统并没有去数据库中查看屏幕超时锁屏的值,就直接锁屏了。
但是怎样才能开机之后不进入锁屏状态呢?这个是个非常费思量的问题。经过go,我知道锁屏的代码在LockScreen.java中,然后顺藤摸瓜,终于找到了可以设置锁屏功能开关的位置。代码位于:
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是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个值。但是经过加打印信息发现开机的时候没有任何应用程序会修改它。修改这个值调用如下函数:
/**
* 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 setKeyguardEnabl
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的定义。
<integer name="def_screen_off_timeout">60000</integer>
发现默认值为60000ms,也就是60s。我们只需要把这个参数改为-1。然后重新编译SettingsProvider模块,就OK了。
另外为了防止用户进入系统后,修改锁屏时间,在Setting模块中删除对锁屏时间的设置。这样Android设备就永不锁屏了。
后来发现我的Android设备烧录好之后第一次启动永远不会锁屏,但是设备重启之后开机就进入锁屏状态,解锁之后就再也不会锁屏了(因为永远不超时)。看来“革命尚未成功,同志仍需努力”啊。
那么为什么启动之后没有进入锁屏状态呢?是不会系统有把超时锁屏的值给修改了呢?我通过sqlite3去查看settings.db的内容,发现超时锁屏的值仍然是-1。说明启动之后,系统并没有去数据库中查看屏幕超时锁屏的值,就直接锁屏了。
但是怎样才能开机之后不进入锁屏状态呢?这个是个非常费思量的问题。经过go,我知道锁屏的代码在LockScreen.java中,然后顺藤摸瓜,终于找到了可以设置锁屏功能开关的位置。代码位于:
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是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个值。但是经过加打印信息发现开机的时候没有任何应用程序会修改它。修改这个值调用如下函数:
/**
* 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 setKeyguardEnabl
发表评论
文章已被作者锁定,不允许评论。
-
Android 分包导致报错ClassNotFoundException
2017-11-09 17:23 992http://blog.csdn.net/daitu_lian ... -
堆栈存值关系
2017-06-22 17:49 494http://www.cnblogs.com/iliuyuet ... -
Java 堆和栈的区别
2017-04-20 13:32 4461、概述 在Java中,内存分为两种,一种是栈内存,另一种就 ... -
序列化和反序列化
2017-04-17 13:31 373http://www.infoq.com/cn/article ... -
Java序列化与反序列化
2017-04-17 11:48 336http://blog.csdn.net/wangloveal ... -
分享文件到微信
2017-02-13 11:07 1004/** * 分享图片给好友 * ... -
material design
2016-12-17 20:39 421可以看看 appCompat http://baike.ba ... -
gson整形(1)被转为double(1.0)解决方法
2016-10-26 17:43 1747private static final Gson g ... -
退出应用
2016-04-22 16:07 580如果处在安全模式,桌面没有你测试的应用图标或小米android ... -
学习记录
2016-01-12 15:15 3381,首先推荐http://blog.csd ... -
Android Eclipse JNI 调用 .so文件加载问题
2015-12-04 19:40 1063背景:对于Android工程 Eclipse里编译好的.so文 ... -
eclipse问题记录
2015-10-21 09:39 505如果你的linux机子是32位的,那么运行android模拟器 ... -
魅族MX adb调试
2015-10-20 19:11 2853魅族MX系列手机打开usb调试后链接不上电脑, 1.在拨号键盘 ... -
相关东西
2015-09-29 18:33 456相关东西 http://www.jobui.com/mians ... -
Android性能优化典范
2015-09-29 14:14 792http://hukai.me/android-perform ... -
Ubuntu环境安装Gradle
2015-09-23 11:03 953AndroidStudio使用全新的构建系列—–Gradle。 ... -
leetcode
2015-09-08 18:11 563一、String.toCharArray数据转换成字符数组 p ... -
Changing SmartGit Free Trial License to Non-Commercial
2015-09-06 11:10 1068By weuo On March 16, 2013 · Add ... -
ubuntu配置adb
2015-08-13 10:28 9601、配置环境变量 进入终端,输入 sudo gedit ... -
webview使用
2015-04-23 21:54 781<p class="agre ...
相关推荐
通过分析锁屏启动流程,开发者可以更好地理解如何在不同场景下控制锁屏的显示和行为,从而实现自定义的锁屏功能。此外,熟悉这一过程还能帮助解决与锁屏相关的问题,提高用户体验。 总的来说,Android 10.0的锁屏...
Android修改源代码控制永不锁屏
在Android平台上,开发一款一键锁屏应用可以帮助用户快速便捷地锁定屏幕,节省电量,保护隐私。本文将深入探讨“android一键锁屏源码”的相关知识点,包括其工作原理、实现方式以及可能遇到的问题。 首先,我们需要...
在Android中,为了访问特定功能,如控制电源或执行设备操作,应用程序必须声明所需的权限。对于锁屏应用,你需要在`AndroidManifest.xml`文件中声明`android.permission.DEVICE_ADMIN_ADMIN`权限,因为只有设备管理...
此外,可能还需要访问`KeyguardManager`和`PowerManager`等系统服务,以便获取和控制锁屏状态。 2. **创建锁屏Activity**: 创建一个新的Activity作为自定义锁屏界面,需要设置其主题为`Theme.DeviceDefault....
【Android 一键锁屏 OneKeyLock 源码解析】 在Android系统中,开发者可以通过编程方式实现各种定制化的功能,其中一键锁屏就是一个常见的需求。OneKeyLock项目就是这样一个实现,它提供了一种简单快捷的方式来锁定...
下面将详细介绍如何在Android锁屏状态下显示Activity。 1. **电源管理与唤醒权限** 在Android中,为了实现锁屏状态下显示Activity,首先需要处理的是电源管理。应用需要获取到相应的唤醒权限,以确保在锁屏时能够...
一、Android锁屏机制 Android锁屏的基本功能包括密码锁、图案锁、指纹锁等,它们都是通过Android的安全框架实现的。安全框架提供了多种接口供开发者使用,如KeyguardManager和KeyguardLock,来控制设备的锁屏状态和...
2. 锁屏操作可能会受到系统的限制,比如在某些设备上,非系统应用可能无法直接控制屏幕的开关。因此,实际开发时需考虑兼容性和设备差异。 3. 对于权限敏感的操作,一定要遵循最佳实践,确保用户隐私不被侵犯。 ...
首先,理解Android锁屏界面的工作原理至关重要。Android系统允许开发者通过服务(Service)和广播接收器(BroadcastReceiver)来监听和控制锁屏状态。在我们的案例中,我们需要创建一个媒体服务,负责播放音频或视频...
首先,Android锁屏界面通常是系统的核心部分,涉及到用户的安全和隐私。默认的锁屏方式包括滑动、PIN码、图案和密码等。自定义锁屏需要对Android的窗口管理器(Window Manager)服务有深入理解,特别是如何创建并...
本文将深入探讨"android锁屏源码"的相关知识点,以帮助开发者理解其工作原理并进行定制。 一、Android锁屏机制概述 Android锁屏分为多种类型,如图案解锁、PIN码解锁、密码解锁等。这些解锁方式的实现基于Android...
"Android 不休眠 不锁屏"是一个针对这类需求的实用Demo,它展示了如何编程实现让Android设备保持屏幕常亮且不解锁。 首先,我们要理解Android系统中的两个关键概念:`Keyguard`和`PowerManager`。`Keyguard`是...
Android 中如何禁止屏幕休眠和锁屏 Android 中禁止屏幕休眠和锁屏是一种常见的需求,特别是在开发一些需要长时间运行的程序时,例如 NowTV 或 XXX 播放器等。这些程序需要长时间保持屏幕常亮,以便用户可以无间断地...
在Android系统中,锁屏时间是由Setting数据库中的一个字段控制的,具体字段名为`Setting.System.SCREEN_OFF_TIMEOUT`。这个字段决定了屏幕在无操作后多久自动熄灭。当我们想要实现让Android设备永不锁屏,我们需要...
8. **唤醒与屏幕亮度控制**:为了确保锁屏界面在设备休眠状态下也能正常工作,你需要使用`WakeLock`来保持CPU运行。同时,可能需要调整屏幕亮度,确保在任何光照条件下都能清晰可见。 9. **权限管理**:在Android ...
在Android开发中,保持应用程序在锁屏状态下不被系统优化机制清理,并且在用户解锁后能够自动关闭特定页面,是一项常见的需求。这涉及到Android系统的进程管理、权限控制以及活动生命周期管理等多个方面。以下是对这...
此外,它还通过提供一系列API来支持锁屏状态的改变,这些API包括但不限于: - `pokeWakelock()`:用于唤醒锁屏。 - `keyguardDone(boolean)`:处理解锁操作。 - `onSimStateChanged()`:响应SIM卡状态变化。 - `...
3. **PowerManager**: `PowerManager`类是Android提供的接口,可以用来控制设备的电源状态。通过它的`goToSleep()`方法,可以模拟电源键的操作,使设备进入休眠状态,达到锁屏效果。 4. **Service**: 在某些情况下...