Android6.0 无法锁屏
由于修改系統(tǒng)鎖屏界面,風格,導致SystemUI和Keyguard改動比較大。結(jié)果發(fā)現(xiàn)重啟后,無法鎖屏、
還原所有改動,無果。遂只能跟蹤鎖屏源碼邏輯,結(jié)果發(fā)現(xiàn):doKeyguard: not showing because device isn't provisioned and the sim is not locked or missing
找到log位置:
private void doKeyguardLocked(Bundle options) {
? ………………
if (!lockedOrMissing && !provisioned && !antiTheftLocked) {
? ? ? ? ? ? if (DEBUG) {
? ? ? ? ? ? ? ? Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
? ? ? ? ? ? ? ? ? ? + " and the sim is not locked or missing");
? ? ? ? ? ? }
? ? ? ? ? ? return;
? ? ? ? }
………………
}
繼續(xù)跟蹤lockedOrMissing,provisioned,antiTheftLocked變量值
找到final boolean provisioned = mUpdateMonitor.isDeviceProvisioned();?
provisioned == false,正是這個值導致doKeyguardLocked提前return
那么isDeviceProvisioned作用是什么呢,我們跟蹤isDeviceProvisioned()函數(shù),如下:
public boolean isDeviceProvisioned() {
? ? ? ? if (mDeviceProvisioned == false) {
? ? ? ? ? ? Log.d(TAG, "isDeviceProvisioned get DEVICE_PROVISIONED from db again !!");
? ? ? ? ? ? return (0 != Settings.Global.getInt(
? ? ? ? ? ? ? ? ? ? mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0));
? ? ? ? } else {
? ? ? ? ? ? Log.d(TAG, "mDeviceProvisioned == true");
? ? ? ? ? ? return mDeviceProvisioned;
? ? ? ? }
? ? }
發(fā)現(xiàn)其實讀取的是SettingProvider的?Settings.Global.DEVICE_PROVISIONED;
繼續(xù)跟蹤的?Settings.Global.DEVICE_PROVISIONED的值,發(fā)現(xiàn)在provision的?DefaultActivity中,Settings.Global.DEVICE_PROVISIONED被寫入1.
到這里問題已經(jīng)很明了了;也有正常情況下第一次開機provision(開機引導)完成后,會把Settings.Global.DEVICE_PROVISIONED置為1
而我們把開機引導過程給去掉了,導致Settings.Global.DEVICE_PROVISIONED一直為0,以至無法鎖屏;
Settings.Global.DEVICE_PROVISIONED這個值在系統(tǒng)中引用的地方不少,如其他應(yīng)用有類似問題,原因也可能如此。
好了,問題解決了。如有不對之處,還望指出,謝謝。
總結(jié)
以上是生活随笔為你收集整理的Android6.0 无法锁屏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能图片放大
- 下一篇: android蓝牙防丢失,Android