Android Setting中添加解除屏幕锁选项

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

先看一张图片:

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


先讲一下思路吧:先把界面做出来,再将是否选择的值存到系统的(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:

[java]  view plain copy
  1. <!-- add by xxnan -->  
  2.    <CheckBoxPreference  
  3.            android:key="lock_screen"  
  4.            android:title="@string/lock_screen_title"  
  5.            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中添加:

[java]  view plain copy
  1. /*****************************************/  
  2.        mLockScreen=(CheckBoxPreference) findPreference(  
  3.           LOCK_SCREEN);  
  4.  int LockScreen=Settings.System.getInt(this.getContentResolver(),  
  5.                    "lock_screen",0);//取出是否被选择  
  6.  if( LockScreen==1)  
  7.      mLockScreen.setChecked(true);//如果被选择,那么下次打开setting时就勾选  
  8.  else  
  9.      mLockScreen.setChecked(false);//如果没被选择,那么下次打开setting时就不勾选  
  10. /*****************************************/   


当然还要定义几个量:

private final String LOCK_SCREEN =
        "lock_screen";    

private CheckBoxPreference mLockScreen;


在onPreferenceTreeClick函数中添加:


[java]  view plain copy
  1. //add by xxnan  
  2.       if(LOCK_SCREEN.equals(key))  
  3.         {  
  4.                  Settings.System.putInt(getContentResolver(),  
  5.                     "lock_screen",  
  6.                     ((CheckBoxPreference) preference).isChecked()? 1:0);//将是否选择存到系统的system表中  
  7.            }  
  8.          //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() 方法中:


[java]  view plain copy
  1. mKeyguardViewManager.show();  
  2.           mShowing = true;  
  3.           adjustUserActivityLocked();  
  4.           adjustStatusBarLocked();  

改为:

[java]  view plain copy
  1.  /* **************************************************/  
  2.     //modifidy by xxnan   
  3.      lock_screen=Settings.System.getInt(mContext.getContentResolver(),    
  4.                   "lock_screen",0);//取出system表中是否取消屏幕锁的值  
  5. if(lock_screen==0)//如果不取消  
  6.     {  
  7.            mKeyguardViewManager.show();  
  8.            mShowing = true;  
  9.            adjustUserActivityLocked();  
  10.            adjustStatusBarLocked();  
  11.     }  
  12.      /***************************************************/    

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


[java]  view plain copy
  1. mKeyguardViewManager.hide();  
  2.            mShowing = false;  
  3.            adjustUserActivityLocked();  
  4.            adjustStatusBarLocked();  

改为:


[java]  view plain copy
  1. /******************************************************/          
  2.     lock_screen=Settings.System.getInt(mContext.getContentResolver(),    
  3.                    "lock_screen",0);//从数据库中取值  
  4.     if(lock_screen==0)  
  5.         {  
  6.             mKeyguardViewManager.hide();  
  7.             mShowing = false;  
  8.             adjustUserActivityLocked();  
  9.             adjustStatusBarLocked();  
  10.         }  
  11.         /*****************************************************/      

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

导入包:

//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就可以了。





转自:http://blog.csdn.net/xiaxiangnanxp1989/article/details/8524092

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值