溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)手勢密碼功能

發(fā)布時(shí)間:2020-11-25 15:41:40 來源:億速云 閱讀:141 作者:Leah 欄目:移動(dòng)開發(fā)

本篇文章為大家展示了Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)手勢密碼功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

1.如果使用GestureOverlayView,在xml配置文件中使用Android.gesture.GestureOverlayView,否則會(huì)報(bào)ClassNotFoundException

2.關(guān)于判斷MEDIA_MOUNTED,API的解釋:getExternalStorageState() returns MEDIA_MOUNTED if the media ispresent and mounted at its mount point with read/write access.

3.使用了service和broadcastReciever進(jìn)行監(jiān)聽,監(jiān)測到屏幕亮暗進(jìn)行程序啟動(dòng),參考了文章:

4.關(guān)于android.intent.action.MAIN

決定應(yīng)用程序最先啟動(dòng)的Activity
android.intent.category.LAUNCHER

決定應(yīng)用程序是否顯示在程序列表里

5.關(guān)于R.id的問題,將要import類R所在的包

6.利用了Android SDK范例開發(fā)中的GestureOverlayView進(jìn)行開發(fā)畫圖工具

7.實(shí)現(xiàn)了在service中啟動(dòng)activity

 Intent i = new Intent(UpdateService.this,Lock.class);
   i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   this.startActivity(i); 

8. 隱藏界面

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
Don't call setContentView() before requestFeature().

9.全屏并屏蔽HOME鍵,以及屏蔽返回鍵,完成辦法。

public booleanonKeyDown(int keyCode,KeyEvent event){
switch(keyCode){
caseKeyEvent.KEYCODE_HOME:return true;
caseKeyEvent.KEYCODE_BACK:return true;
caseKeyEvent.KEYCODE_CALL:return true;
caseKeyEvent.KEYCODE_SYM: return true;
caseKeyEvent.KEYCODE_VOLUME_DOWN: return true;
caseKeyEvent.KEYCODE_VOLUME_UP: return true;
caseKeyEvent.KEYCODE_STAR: return true;
}
returnsuper.onKeyDown(keyCode, event);
}

屏蔽home鍵的代碼:

public voidonAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

出現(xiàn)問題:WindowManager.LayoutParams.TYPE_KEYGUARD以及LayoutParams.FLAG_FULLSCREEN出現(xiàn)沖突,無法解決,搜索網(wǎng)上無解決辦法。

參考文檔:
 \frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java1089行

if (code ==KeyEvent.KEYCODE_HOME) {
 
  // If a system window has focus,then it doesn't make sense
  // right now to interact withapplications.
  WindowManager.LayoutParams attrs =win != null ? win.getAttrs() : null;
  if (attrs != null) {
  final int type = attrs.type;
  if (type ==WindowManager.LayoutParams.TYPE_KEYGUARD
   || type ==WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
   // the "app" iskeyguard, so give it the key
   return false;
  }
  final int typeCount =WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
  for (int i=0; i<typeCount;i++) {
   if (type ==WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
   // don't do anything,but also don't pass it to the app
   return true;
   }
  }
  }

因此解決問題! 

10.出現(xiàn)了返回HOME頁后重新從程序頁進(jìn)入,發(fā)現(xiàn)又進(jìn)入開鎖界面:

經(jīng)過查詢思考,發(fā)現(xiàn),其實(shí)是HOME頁后將程序放入處理?xiàng).?dāng)中,所以重新進(jìn)入時(shí)就會(huì)繼續(xù)回到棧頂,并且破壞了全屏效果。

因此必須實(shí)現(xiàn)返回鍵功能,而不是HOME鍵。

因此,使用finish();方法就足夠了,狗日的SDK開發(fā),竟然寫了一個(gè)外部監(jiān)聽,不能使用finish方法,后來改寫成內(nèi)部類,直接搞定。

根據(jù)個(gè)人感覺,其實(shí)監(jiān)聽寫內(nèi)部類還是比較保險(xiǎn)的,開發(fā)初級階段,慢慢摸索。
newGestureOverlayView.OnGesturePerformedListener() 

最后,上效果圖,4天的結(jié)果,還不錯(cuò)。起碼解決了全屏顯示和屏蔽HOME鍵的問題。

上述內(nèi)容就是Android開發(fā)中怎么實(shí)現(xiàn)一個(gè)手勢密碼功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI