- 浏览: 85438 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (56)
- Flex (10)
- Android SQLite (3)
- Android (16)
- ListView (1)
- Android 多线程 (1)
- Android Google Maps (1)
- Flex 基础 (1)
- Android ImageView (0)
- Android WebService (0)
- Android 杂项 (2)
- Android 主题与样式 (1)
- Android 数据库 (1)
- Android 短信 (2)
- Ubuntu 11.04 for 64 (2)
- SharedPreferences (2)
- manifest (1)
- 杂项 (9)
- Android 网络 (1)
最新评论
-
DUANLESINIAN:
楼主配置文件讲的不清不楚,应该是这样的:<applica ...
在任意位置获取应用程序Context -
andytang_bin:
我QQ 912180974
解决 Android 下载中文文件名问题 -
andytang_bin:
还是不行。 能Q上联系吗?!
解决 Android 下载中文文件名问题
锁定屏幕对于移动终端来说是非常有必要的,但是对于机顶盒产品就没有这个必要了。所以本文介绍一下怎样让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 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) { // reenabled after previously hidden, reshow if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling " + "status bar expansion"); mNeedToReshowWhenReenabled = false; if (mExitSecureCallback != null) { if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting"); mExitSecureCallback.onKeyguardExitResult(false); mExitSecureCallback = null; resetStateLocked(); } else { showLocked(); // block until we know the keygaurd is done drawing (and post a message // to unblock us after a timeout so we don't risk blocking too long // and causing an ANR). mWaitingUntilKeyguardVisible = true; mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS); if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false"); while (mWaitingUntilKeyguardVisible) { try { wait(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible"); } } } }
经过上面的讨论我们可以发现我们有两个解决方法:
1、定义变量的时候,给其初始化为false。
2、在launcher模块启动的时候,调用setKeyguardEnabled方法,关闭锁屏功能。
我懒得修改Laucher模块,我的解决方法就是在定义mExternallyEnabled时修改其初始值为false。各位朋友可以根据自己的实际情况选择解决方案。我的代码如下:
/** * External apps (like the phone app) can tell us to disable the keygaurd. */ private boolean mExternallyEnabled = false;
这样修改之后,Android设备开机之后,默认不会进入锁屏状态,除非你在应用程序中调用setKeyguardEnabled方法显示打开这个功能。因为设置的超时时间为-1,则永远也不会进入锁屏界面。完全满足了我的需求,终于大功告成了。开心啊~!!
发表评论
-
Android开发之ListView 适配器(Adapter)优化
2011-05-14 15:56 996ListView的Adapter的作用如下图所示: Adap ... -
Android上面TreeView效果
2011-05-14 11:17 1465应该说很多的操作系统上面都提供了TreeView空间,实现树 ... -
Android软键盘学习InputMethodManager
2011-05-14 11:14 4024当我们在Android提供的EditText中单击的时候,会自 ... -
Android WakeLock
2011-05-12 22:50 1393在Android中,申请WakeLock可以让你的进程持续执行 ... -
Android中的Handler使用总结
2011-04-21 16:37 670在Android的UI开发中,我们经常会使用Handler来控 ... -
Android多线程及异步处理问题 【转载】
2011-04-17 23:53 19901、问题提出 1)为何需要多线程? 2)多线程如何实现? 3) ... -
EditText的属性说明
2011-04-14 11:47 887EditText的属性很多,这 ... -
Android 系统自带的图片
2011-04-14 11:43 1278This is a list of resources in ... -
Android Check GPS is Enabled or Not
2011-04-13 21:21 0在 Android 中, 我们可以使用 LocationMan ... -
Android ListView with Searchbox Sort items
2011-04-13 16:11 0这里我们有一个搜索框, 当它里面的内容与列表项匹配时... ... -
Android ListView Multiple Choice Example
2011-04-13 14:28 0在 Andoird 中 ListView 通常用来显示一个列表 ... -
TextView 不用 ScrollViewe 也可以滚动
2011-04-12 16:13 1017具体步骤: 第一步: xml 文件 <Text ... -
Activity...
2011-04-10 17:03 1072一、常用类: 1. Activity 是最基本的类,它 ... -
Android2.1中的 drawable(hdpi,ldpi,mdpi) 的区别
2011-03-24 21:37 940在之前的版本中,只有一个drawable,而2.1版本中有dr ... -
ADB常用命令
2011-03-24 21:36 951ADB(Android Debug Bridge)是A ... -
在任意位置获取应用程序Context
2011-03-24 21:35 1681在 Android 程序中访问资源时需要提供 Cont ... -
android Toast大全(五种情形)建立属于你自己的Toast
2011-03-19 18:26 876Toast用于向用户显示一些帮助/提示。下面我做了5中效果, ... -
Android简单数据存储类SharedPreferences详解及实例(通过“记住密码”功能学习SharedPreferences)
2011-03-19 18:23 4125SharedPreferences是Android中存储简单数 ...
相关推荐
通过分析锁屏启动流程,开发者可以更好地理解如何在不同场景下控制锁屏的显示和行为,从而实现自定义的锁屏功能。此外,熟悉这一过程还能帮助解决与锁屏相关的问题,提高用户体验。 总的来说,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**: 在某些情况下...