Android Setting中添加是否有螢幕鎖

來源:互聯網
上載者:User

首先,我前面有一片部落格寫的是android消除螢幕鎖 ,這裡想加以改進,因為在我們所使用的手機中已經在“設定”的“協助工具功能”中有選擇是否“解除螢幕鎖”(也就開機時和按power鍵 亮屏時是否有螢幕鎖)。 這裡我想做的就是在原生的android源碼上添加這一功能,主要還是以學習為主去實現這一功能。 看這個之前我希望你們看一下android消除螢幕鎖這篇部落格。 首先我是在做好了案頭迴圈之後去做在“設定”中的“協助工具功能”中添加這一項:先看一張圖片:這裡的解除螢幕鎖就是咱們要添加的項。 先講一下思路吧:先把介面做出來,再將是否選擇的值存到系統的(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]  <!-- 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中添加:[java]  /*****************************************/         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函數中添加: [java] //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() 方法中: [java]  mKeyguardViewManager.show();            mShowing = true;            adjustUserActivityLocked();            adjustStatusBarLocked();   改為:[java]  /* **************************************************/      //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() 方法中也要做一樣的修改: [java]  mKeyguardViewManager.hide();             mShowing = false;             adjustUserActivityLocked();             adjustStatusBarLocked();   改為: [java]  /******************************************************/              lock_screen=Settings.System.getInt(mContext.getContentResolver(),                       "lock_screen",0);//從資料庫中取值      if(lock_screen==0)          {              mKeyguardViewManager.hide();              mShowing = false;              adjustUserActivityLocked();              adjustStatusBarLocked();          }          /*****************************************************/       當然這裡面也要定義幾個量,以及匯入幾個包:匯入包://add by xxnanimport 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就可以了。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.