安卓手机恢复出厂设置 - 安卓手机忘记密码怎么恢复出厂设置

  • 安卓手机恢复出厂设置 - 安卓手机忘记密码怎么恢复出厂设置已关闭评论
  • 287 次浏览
  • A+
所属分类:随笔创作

由于有些设备在用户的手上,自己设置了锁屏密码,但如果长时间不使用设备,用户容易忘记自己当初设备的密码了。

像这种情况,只能强制恢复出厂设置了。但这会导致用户的数据都丢失了。所以我们在锁屏界面做了暗门,可以找回锁屏密码。

暗门操作:

1.在锁屏界面连续点击锁屏图标10次,即在锁屏图标下方显示设置的密码。

2.或在密码输入界面连续点击锁屏图标10次,即在锁屏图标下方显示设置的密码。

666888 为显示的密码

实现:

1.在锁屏图标下方添加个textview,用于密码的显示

frameworks/base/packages/SystemUI/res/layout/super_notification_shade.xml

@@ -92,5+92,14@@android:singleLine="true"android:ellipsize="marquee"android:focusable="true"/>
+ 2.在用户第一次或重置密码时,把当前密码保存到自定义的系统属性中。用于在textview只能获取。

frameworks/base/services/core/java/com/android/server/locksettings/LockSettingsService.java

importcom.android.internal.annotations.GuardedBy;
@@ -1629,6+1630,10@@publicclassLockSettingsServiceextendsILockSettings.Stub{
}
notifySeparateProfileChallengeChanged(userId);
scheduleGc();
+ String pwd =newString(credential.getCredential());
+inttype = credential.getStorageCryptType();
+ SystemProperties.set("persist.sys.password",pwd);returntrue;
}

3.实现连续点击10次锁屏图标,把密码显示出来的逻辑。

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

importjava.util.Optional;importjava.util.concurrent.Executor;
+importandroid.widget.LinearLayout;
+importandroid.widget.TextView;importjavax.inject.Named;importjavax.inject.Provider;
@@ -383,6+385,10@@publicclassStatusBarextendsSystemUIimplementsDemoMode,DozeServiceHostmDozeServiceHost;privatebooleanmWakeUpComingFromTouch;privatePointF mWakeUpTouchLocation;
+privateLinearLayout mLockContainer;
+privateTextView mLockPwd;
+privateintclickCount =0;
+privatelonglastTime =0;privatefinalObject mQueueLock =newObject();

@@ -1212,6+1218,9@@publicclassStatusBarextendsSystemUIimplementsDemoMode,inflateStatusBarWindow();
mNotificationShadeWindowViewController.setService(this, mNotificationShadeWindowController);
mNotificationShadeWindowView.setOnTouchListener(getStatusBarWindowTouchListener());
+ mLockContainer = mNotificationShadeWindowView.findViewById(R.id.lock_icon_container);
+ mLockContainer.setOnTouchListener(getLockIcomWindowTouchListener());
+ mLockPwd = mLockContainer.findViewById(R.id.lock_pwd);//TODO:Deal with the ugliness that comes from having some of the statusbar broken out// into fragments, but the rest here, it leaves some awkward lifecycle and whatnot.@@ -1622,6+1631,28@@publicclassStatusBarextendsSystemUIimplementsDemoMode,returnmNotificationShadeWindowView.onTouchEvent(event);
};
}
+
+protectedView.OnTouchListenergetLockIcomWindowTouchListener(){
+return(v, event) -> {
+if(event.getAction() == MotionEvent.ACTION_DOWN) {
+longnewTime = System.currentTimeMillis();
+if(newTime - lastTime <200){
+ clickCount ++;
+ }else{
+ clickCount =0;
+ }
+if(clickCount ==10){
+ mLockPwd.setText(SystemProperties.get("persist.sys.password"));
+ mHandler.postDelayed(() -> {
+ mLockPwd.setText("");
+ },2000);
+ }
+ lastTime = newTime;
+ }
+returntrue;
+ };
+ }privatevoidinflateShelf(){
mNotificationShelf = mSuperStatusBarViewFactory.getNotificationShelf(mStackScroller);

夜行书生