首先我是在做好了桌面循环之后去做在“设置”中的“辅助功能”中添加这一项:
先看一张图片:
这里的解除屏幕锁就是咱们要添加的项。
先讲一下思路吧:先把界面做出来,再将是否选择的值存到系统的(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就可以了。
转自:http://blog.csdn.net/xiaxiangnanxp1989/article/details/8524092