賀建英,袁小艷,唐青松
(四川文理學(xué)院 計(jì)算機(jī)學(xué)院,四川 達(dá)州 635000)
Android系統(tǒng)下人機(jī)交互解鎖屏功能的應(yīng)用研究
賀建英,袁小艷,唐青松
(四川文理學(xué)院計(jì)算機(jī)學(xué)院,四川 達(dá)州 635000)
針對(duì)智能終端設(shè)備解鎖的實(shí)際應(yīng)用,通過隨機(jī)生成英文單詞為解鎖密碼的方式,改變傳統(tǒng)的解鎖模式。利用SQLite數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),采用Java語(yǔ)言,使用MVC的設(shè)計(jì)模式,設(shè)計(jì)出一套人性化的人機(jī)交互解鎖屏的平臺(tái),并利用SQLite的二分查找法快速生成解鎖的密碼單詞,減少檢索數(shù)據(jù)的時(shí)間。實(shí)驗(yàn)表明,本設(shè)計(jì)能有效的實(shí)現(xiàn)人機(jī)交互并完成解鎖功能。
SQLite數(shù)據(jù)庫(kù);人機(jī)交互;MVC;二分查找;解屏
在信息化建設(shè)進(jìn)程的不斷推進(jìn)過程中,移動(dòng)智能手持設(shè)備已經(jīng)成為人們獲取網(wǎng)絡(luò)信息的主要手段之一。移動(dòng)智能終端設(shè)備的出現(xiàn),改變了人們的生活方式,如使用終端設(shè)備進(jìn)行網(wǎng)絡(luò)購(gòu)物,游戲娛樂,分享感受,發(fā)布照片等等。由于智能設(shè)備的輸入大部分采用電容式觸摸屏技術(shù),為防止用戶將設(shè)備貼身出現(xiàn)誤操作等一系列異常情況的出現(xiàn),因此,在移動(dòng)智能終端系統(tǒng)中設(shè)計(jì)實(shí)現(xiàn)解鎖屏功能十分必要。通過對(duì)眾多解鎖屏軟件的分析,當(dāng)前該功能主要通過預(yù)設(shè)定一串?dāng)?shù)字字符串作為密碼,在解屏的時(shí)候,用戶點(diǎn)擊數(shù)字鍵或者滑動(dòng)等所輸入的符號(hào)來與原字符串進(jìn)行匹配,該方式存在的弊端主要體現(xiàn)在人機(jī)交互性差,主要表現(xiàn)在密碼值的唯一性,因此,文中基于Android操作系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)隨機(jī)產(chǎn)生英語(yǔ)單詞作為密碼的方式實(shí)現(xiàn)密碼值的多樣化,以表現(xiàn)在解鎖方面的交互性能。
1.1Android平臺(tái)
Android平臺(tái)的開源特性得到了很多廠商的支持,是目前手持設(shè)備終端應(yīng)用廣泛的操作系統(tǒng),根據(jù)眾多文獻(xiàn)資料和系統(tǒng)源程序的分析,可以得出,Android系統(tǒng)基于Linux內(nèi)核擴(kuò)展,形成數(shù)據(jù)應(yīng)用及系統(tǒng)服務(wù)、應(yīng)用程序框架服務(wù)和人機(jī)交互應(yīng)用程序等系統(tǒng)架構(gòu)方式,如圖1所示[1]。程序人員根據(jù)用戶的需求,在系統(tǒng)構(gòu)架的基礎(chǔ)上,可以設(shè)計(jì)和開發(fā)各種基于Android平臺(tái)的應(yīng)用程序。
圖1 Android系統(tǒng)架構(gòu)圖
1.2SQLite數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)為應(yīng)用程序提供數(shù)據(jù)支持,在計(jì)算機(jī)應(yīng)用程序中應(yīng)用廣泛。眾多的數(shù)據(jù)庫(kù)系統(tǒng)管理軟件中,關(guān)系數(shù)據(jù)庫(kù)SQLite基于其嵌入式設(shè)計(jì)目標(biāo),具有的微小輕型、占用資源少等特性,同時(shí),該數(shù)據(jù)庫(kù)支持關(guān)系數(shù)據(jù)庫(kù)中的增刪改查、建立索引該、創(chuàng)建視圖等幾乎所有的功能,并且可以和多種計(jì)算機(jī)語(yǔ)言相結(jié)合,如Java,C#等高級(jí)語(yǔ)言[2]。
由于在Android系統(tǒng)應(yīng)用程序往往需要有數(shù)據(jù)的支持,SQLite數(shù)據(jù)庫(kù)占用資源少的特性,因此在Android系統(tǒng)通常使用它為應(yīng)用程序的提供數(shù)據(jù)支持,如在眾多Android瀏覽器應(yīng)用軟件中,使用SQLite數(shù)據(jù)庫(kù)存儲(chǔ)用戶的歷史瀏覽記錄、用戶對(duì)地址的收藏等操作。
1.3解鎖屏原理
當(dāng)Android系統(tǒng)啟動(dòng)后,系統(tǒng)將使用類PhoneWindowManager來管理Android系統(tǒng)中將要初始化的KeyGuardViewMediator類,然后調(diào)用該類的SystemReady()方法調(diào)用鎖屏的流程,當(dāng)時(shí)間延遲符合所設(shè)置的條件的時(shí)候,將調(diào)用KeyGuardViewMediator類的onSystemReady()方法開始鎖屏操作,并且在鎖屏操作之前判斷是否有第三方鎖屏應(yīng)用的文件,如果沒有則調(diào)用showLocked()函數(shù),讓handler發(fā)送顯示鎖屏信息或延時(shí)處理,handler接收消息,直接調(diào)用handleShow()方法,從而實(shí)現(xiàn)系統(tǒng)的鎖屏操作。
2.1構(gòu)架設(shè)計(jì)
遵從Android系統(tǒng)應(yīng)用的結(jié)構(gòu),應(yīng)用程序框架采用MVC (Model-View-Controller)模式[3],實(shí)現(xiàn)模型與視圖層之間的代碼分離,增強(qiáng)應(yīng)用程序的可擴(kuò)展性和易維護(hù)性能,如圖2所示。
圖2 應(yīng)用程序三層構(gòu)架設(shè)計(jì)圖
1)視圖表現(xiàn)層。視圖層主要使用XML文件保存操作界面的樣式,使之與Android應(yīng)用程序的資源文件路徑(RES/ LAYOUT)一致,以XML文件形式體現(xiàn),并且在該文件中設(shè)置好布局樣式(Layout)。用戶在操作的過程中,若要修改布局中的內(nèi)容,或者更改控件的相關(guān)屬性,可以通過程序調(diào)用Android API提供的getViewById()方法進(jìn)行設(shè)置,如此可以增強(qiáng)邏輯結(jié)構(gòu),將視圖層與數(shù)據(jù)事務(wù)等操作的分離。
2)業(yè)務(wù)邏輯層。該層為整個(gè)應(yīng)用程序的核心,首先通過Service監(jiān)聽用戶的操作狀態(tài),然后判斷是否啟動(dòng)程序,如是否調(diào)用android.intent.action.SCREEN_ON來激活屏幕等操作。調(diào)用隨機(jī)抽取數(shù)據(jù)庫(kù)中的記錄以生成相關(guān)問題,等待用戶的響應(yīng),最后為處理相關(guān)信息調(diào)用相關(guān)事務(wù),因此,該層為信息處理中心與用戶交互的中間層。
3)數(shù)據(jù)持久層。為給解屏增強(qiáng)交互性,需要不斷地從數(shù)據(jù)庫(kù)中抽取相關(guān)信息呈現(xiàn)給用戶,讓用戶經(jīng)過思考后給出相應(yīng)的答案,以輸入的方式來驗(yàn)證答案的正確性,因此,數(shù)據(jù)持久層的設(shè)計(jì)非常重要。在應(yīng)用程序中,采取關(guān)系對(duì)象映射技術(shù),將關(guān)系數(shù)據(jù)庫(kù)中對(duì)應(yīng)的記錄轉(zhuǎn)換成面向?qū)ο缶幊陶Z(yǔ)言中的對(duì)象,如此為開發(fā)人員提供對(duì)象的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問、操作SQLite數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
2.2整體流程設(shè)計(jì)
根據(jù)Android系統(tǒng)設(shè)計(jì)的解鎖屏技術(shù)原理[4],系統(tǒng)將使用類PhoneWindowManager來管理Android系統(tǒng)中的KeyGuardViewMediator類,以此為切入點(diǎn),調(diào)用該類的SystemReady()方法調(diào)用鎖屏的流程,當(dāng)時(shí)間延遲符合所設(shè)置的條件的時(shí)候,將調(diào)用KeyGuardViewMediator類的onSystemReady()方法開始鎖屏操作,并且在鎖屏操作之前判斷是否有第三方鎖屏應(yīng)用的文件,如果沒有則調(diào)用showLocked()函數(shù),讓handler發(fā)送顯示鎖屏信息或延時(shí)處理,handler接收消息,直接調(diào)用handleShow()方法,從而實(shí)現(xiàn)系統(tǒng)的鎖屏操作。如圖3所示。
圖3 應(yīng)用程序整體功能構(gòu)架
2.3數(shù)據(jù)庫(kù)設(shè)計(jì)
應(yīng)用程序中數(shù)據(jù)庫(kù)主要保存英語(yǔ)詞匯,在解鎖屏幕的時(shí)候,隨機(jī)抽取某一個(gè)單詞的各中文含義,提供輸入界面讓用戶對(duì)其單詞進(jìn)行拼寫,從而達(dá)到人機(jī)交互的目的。因此數(shù)據(jù)庫(kù)中需要設(shè)計(jì)保存英文詞匯的數(shù)據(jù)表,為擴(kuò)充詞匯量,設(shè)計(jì)詞匯更新日志表記錄當(dāng)前詞匯量狀況,以便及時(shí)通過網(wǎng)絡(luò)向詞匯表中補(bǔ)充單詞,關(guān)系結(jié)構(gòu)可表示為表1和表2所示。
3.1加載數(shù)據(jù)
建立與數(shù)據(jù)庫(kù)的連接:
db=(new DatabaseHelper(getContext()).getWritableDatabase();
表1 詞匯表的結(jié)構(gòu)
表2 詞匯更新日志表結(jié)構(gòu)
關(guān)閉數(shù)據(jù)庫(kù)連接:db.close();
3.2屏蔽原解鎖界面
在用戶點(diǎn)擊按鈕觸發(fā)界面點(diǎn)亮,應(yīng)用程序監(jiān)聽到該事件的觸發(fā)后,啟動(dòng)PemoLickService服務(wù),調(diào)用keyguardManage()方法,禁用設(shè)備原來的鎖屏活動(dòng)界面(StudyPemoPatternActivity),以展示應(yīng)用程序自定義屏幕解鎖界面[5]。
private BroadcastReceiver mScreenOffReceivernumberok=new roadcastReceiver(){
public void onTheReceive(Context context,Intent intent){
String doaction=intent.getAction();
if(doaction.equals("android.intent.action.SCREEN_OFF")|| doaction.equals("android.intent.action.SCREEN_ON")
){mKeyguardManager=(KeyguardManager)context. getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock=mKeyguardManager.newKeyguardLock ("phone_lock");mKeyguardLock.disableKeyguard();
startActivity(LockIntent);
}}};
3.3啟用自定義解鎖界面
啟用自定義解鎖界面的關(guān)鍵代碼為[6]:
public void dialogwindow(String dig_title,String tip,final int id){LayoutInflater newfactory=layoutInflater.from(this);
finalViewDialogViewShow=newfactory.inflate(R.layout. layout_phone_dialog,null);
TextView textViewshow=(TextView)dialogViewshow. findViewById(R.id.layout_phone_lock_dialog_tip);textViewshow.setText(tip);textViewshow.setTextColor(Color. WHITE);
AlertDialog digaction=new AlertDialog.Builder(this). setTitle(digaction_title).setView(DialogViewshow). setPositiveButton("確定",new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog,int which){
Intent intent=null;if(id==0){(new InitData(mContext). initApp();intent=new Intent(mContext,LockService.class);}else{intent=new Intent(mContext,PemoLockService.class);}new topElseService(mContext);startService(intent);dialog.cancel();
}).setNegativeButton("取 消 ",newDialogInterface. OnClickListener(){@Override
public void onClick(DialogInterface dialog,int which){dialog.cancel();}}).create();digaction.show();}
3.4交互式處理的實(shí)現(xiàn)
交互式處理的關(guān)鍵代碼為:
public void unlockThead(){threadunlock=new Thread(){public void run(){
while(sharedPreferences.getBoolean("flag",true)&& haredPreferences.getString("answer","").equals(anwser){try {sleep(1000);}catch(InterruptedException e){}String tempString =edit_one.getText().toString().trim();
if(tempString.length() >=anwser.trim().length()){InputMethodManagerInputMethodManager;mInputMethodManagerview=(InputMethodManager)mContext. getSystemService(Context.INPUT_METHOD_SERVICE);
mInputMethodManager.hideSoftInputFromWindow (GamePatternIdiomsActivity.this.getCurrentFocus(). getWindowToken(),inputMethodManager. HIDE_NOT_ALWAYS);Message message=new Message();
message.what=tempString.equals(anwser.trim()|| tempString==anwser.trim()?true:fasle;mHandler. sendMessage(message);if(message.what==1){editor.putBoolean ("flag",false);editor.commit();}}}if(thread.interrupted(){thread. interrupt();}}};}
經(jīng)過測(cè)試,該應(yīng)用程序能正常執(zhí)行。如圖4所示。
圖4 程序運(yùn)行效果圖
在測(cè)試過程中,本應(yīng)用程序的關(guān)鍵在于提取SQLite數(shù)據(jù)庫(kù)中數(shù)據(jù)的耗時(shí)情況,其統(tǒng)計(jì)記錄如圖5所示。
實(shí)驗(yàn)結(jié)果分析,由于程序中使用單個(gè)數(shù)據(jù)表,在執(zhí)行查詢時(shí),使用隨機(jī)查詢方式[7]:select*from vocabulary order by RANDOM()limit 1
圖5 讀取SQLite數(shù)據(jù)庫(kù)中數(shù)據(jù)的耗時(shí)
以上SQL語(yǔ)句的執(zhí)行中,根據(jù)數(shù)據(jù)表主鍵ID遞增的順序,由SQLite的兩種檢索數(shù)據(jù)方式中的二分查找可以快速抽取出數(shù)據(jù),因此在檢索中消耗時(shí)間相差較小。
該應(yīng)用程序以幫助在校學(xué)生群體的用戶記憶英文單詞為目的,對(duì)Android系統(tǒng)鎖屏功能進(jìn)行了改進(jìn),設(shè)計(jì)實(shí)現(xiàn)了依據(jù)英文單詞的含義,對(duì)英文單詞填空的交互式屏幕解鎖功能,實(shí)驗(yàn)測(cè)試表明,本方案可以對(duì)傳統(tǒng)解鎖模式中密碼單一性向多樣化擴(kuò)展,具有一定的實(shí)用價(jià)值。以此推廣,可以為其他的用戶群體服務(wù)為目的而設(shè)計(jì)相應(yīng)的解鎖程序,由此,對(duì)應(yīng)用程序的功能拓展、資源占有、SQLite查詢優(yōu)化等問題還可以作進(jìn)一步的研究。
[1]馮玉平,王曙光.基于Android的手機(jī)定位軟件[J].計(jì)算機(jī)與現(xiàn)代化,2015(2):11-13.
[2]林培杰,朱安南,程樹英.Android數(shù)據(jù)庫(kù)SQLite性能優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(12):193-196.
[3]鄭行雙.基于MVC的Android與Web雙模式教學(xué)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2013.
[4]王艷敏,李永忠,呂少偉.Android平臺(tái)下文件透明加密技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014(8):137-140.
[5]張慶陽(yáng),楊陽(yáng),程久軍,等.基于手機(jī)動(dòng)態(tài)密碼的計(jì)算機(jī)使用權(quán)限管理機(jī)制[J].信息網(wǎng)絡(luò)安全,2014(8):46-51.
[6]石艷敏.一種高效的計(jì)算機(jī)聯(lián)鎖軟件測(cè)試方法[J].鐵路計(jì)算機(jī)應(yīng)用,2013(12):50-54.
[7]沈美,于翔.基于SQLite數(shù)據(jù)庫(kù)的安卓日程管理系統(tǒng)的設(shè)計(jì)與開發(fā)[J].電子技術(shù)與軟件工程,2014(12):216-217.
The application research on the human computer interaction screen unlocking function under Android
HE Jian-ying,YUAN Xiao-yan,TANG Qing-song
(College of Computer,Sichuan University of Arts and Science,Dazhou 635000,China)
This design will change the traditional unlocking pattern by forming English word randomly as password in the view of the practical application of the unlocking of intelligent terminal equipment.It is a set of humanized platform of screen unlocking of human computer interaction in JAVA by storing data in SQLite database,which can save time on searching data in the use of the binary search of SQLite to generate password quickly.It has been proved by experiment that this design can realize the interaction between human and computer and fulfil the unlocking function effectively.
SQLite database;human computer interaction;MVC;binary chop;unlock
TN602
A
1674-6236(2016)13-0004-03
2015-07-13稿件編號(hào):201507085
四川省教育廳項(xiàng)目(15ZB0324)
賀建英(1979—),女,四川簡(jiǎn)陽(yáng)人,碩士,講師。研究方向:軟件技術(shù),數(shù)據(jù)挖掘,物聯(lián)網(wǎng)。