首先,我前面有一片博客写的是android消除屏幕锁,这里想加以改进,因为在我们所使用的手机中已经在“设置”的“辅助功能”中有选择是否“解除屏幕锁”(也就开机时和按power键


亮屏时是否有屏幕锁)。


这里我想做的就是在原生的android源码上添加这一功能,主要还是以学习为主去实现这一功能。


看这个之前我希望你们看一下android消除屏幕锁这篇博客。


首先我是在做好了桌面循环之后去做在“设置”中的“辅助功能”中添加这一项:

先看一张图片:Android Setting中添加解除屏幕锁选项_第1张图片

这里的解除屏幕锁就是咱们要添加的项。


先讲一下思路吧:先把界面做出来,再将是否选择的值存到系统的(adb shell进入)data/data/com.android.providers.settings/databases/settings.db数据库中的system表中,


然后在framework/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java的源码中取得数据库中是否选择循环桌面来执行相关代码。


先做UI:

先做UI:


在settings源码中的accessibility_settings.xml文件中添加一个checkbox:

 <!-- add by xxnan -->    <CheckBoxPreference            android:key="lock_screen"            android:title="@string/lock_screen_title"            android:persistent="false"/>   

在settings源码的res中添加相关的代码:

在values/string.xml中添加(英文显示):

<string name="lock_screen_title">Lock_Screen</string>


在values-zh-rCN/string.xml中添加(中文显示):

<string name="lock_screen_title" msgid="4676390750360727396">"循环桌面"</string>


在settings源码的AccessibilitySettings.java中的OnCreate中添加:

 /*****************************************/        mLockScreen=(CheckBoxPreference) findPreference(           LOCK_SCREEN); int LockScreen=Settings.System.getInt(this.getContentResolver(),                    "lock_screen",0);//取出是否被选择 if( LockScreen==1)  mLockScreen.setChecked(true);//如果被选择,那么下次打开setting时就勾选 else  mLockScreen.setChecked(false);//如果没被选择,那么下次打开setting时就不勾选/*****************************************/


当然还要定义几个量:

private final String LOCK_SCREEN =
"lock_screen";

private CheckBoxPreference mLockScreen;


在onPreferenceTreeClick函数中添加:


//add by xxnan  if(LOCK_SCREEN.equals(key)) {                 Settings.System.putInt(getContentResolver(),                    "lock_screen",                    ((CheckBoxPreference) preference).isChecked()? 1:0);//将是否选择存到系统的system表中       }         //add by xxnan

如果做好了之后当你点击选择“桌面循环时”可以到(adb shell进入)data/data/com.android.providers.settings/databases下的settings.db数据库(sqlite3 settings.db)的system


表中看到lock_screen|1(select * from system;)。

到这里就完成了将数据存到系统system表中以及UI,接下来就是在framework/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java源码中去取这个值。


在framework/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java中的private void handleShow() 方法中:


  mKeyguardViewManager.show();            mShowing = true;            adjustUserActivityLocked();            adjustStatusBarLocked();

改为:

  /* **************************************************///modifidy by xxnan     lock_screen=Settings.System.getInt(mContext.getContentResolver(),                     "lock_screen",0);//取出system表中是否取消屏幕锁的值if(lock_screen==0)//如果不取消{            mKeyguardViewManager.show();            mShowing = true;            adjustUserActivityLocked();            adjustStatusBarLocked();}     /***************************************************/

并且在private void handleHide() 方法中也要做一样的修改:


 mKeyguardViewManager.hide();            mShowing = false;            adjustUserActivityLocked();            adjustStatusBarLocked();

改为:


/******************************************************/lock_screen=Settings.System.getInt(mContext.getContentResolver(),                     "lock_screen",0);//从数据库中取值if(lock_screen==0){            mKeyguardViewManager.hide();            mShowing = false;            adjustUserActivityLocked();            adjustStatusBarLocked();}        /*****************************************************/    

当然这里面也要定义几个量,以及导入几个包:

导入包:

//add by xxnan
import android.content.ContentResolver;//从system表中取数据
import android.provider.Settings;

定义变量:private int lock_screen;//取得是否循环的值


到这里就全部修改好了,还有就是编译一下源码中的package/apps的settings源码和framework/base的policy源码,将生成的out/target/。。。/system/app下的

Settings.apk和system/framework下的android.policy.jar替换手机里system/app的Settings.apk和system/framework下的android.policy.jar就可以了。




更多相关文章

  1. Android 手电筒源码
  2. Android测试之Monkey原理及源码分析(二)
  3. Android全部源码导入Eclipse
  4. Android ServiceManager源码(一)-- C语言部分
  5. Android 在屏幕上打印LOG
  6. WINDOWS下ECLIPSE ANDROID源码SETTINGS模块调试
  7. Android短彩信源码解析-短信发送流程(二)

随机推荐

  1. Android中如何做到Service被关闭后又自动
  2. [置顶] Android下通过pocketsphinx实现离
  3. declare-styleable:自定义控件的属性,andr
  4. Android(安卓)魔塔小游戏--界面设计以及
  5. 随笔之如何判断Android应用进程是否为单
  6. Android(安卓)如何连续的扫描蓝牙的RSSI
  7. Android进程保活(最新)带你浅析这几种可行
  8. Android图像处理技术(实现Android中的PS)(三
  9. Android经典项目开发之天气APP实例分享
  10. 【android免root脚本制作】基于控件的操