賀建英,袁小艷,唐青松
(四川文理學院 計算機學院,四川 達州 635000)
Android系統(tǒng)下人機交互解鎖屏功能的應用研究
賀建英,袁小艷,唐青松
(四川文理學院計算機學院,四川 達州 635000)
針對智能終端設備解鎖的實際應用,通過隨機生成英文單詞為解鎖密碼的方式,改變傳統(tǒng)的解鎖模式。利用SQLite數(shù)據(jù)庫對數(shù)據(jù)進行存儲,采用Java語言,使用MVC的設計模式,設計出一套人性化的人機交互解鎖屏的平臺,并利用SQLite的二分查找法快速生成解鎖的密碼單詞,減少檢索數(shù)據(jù)的時間。實驗表明,本設計能有效的實現(xiàn)人機交互并完成解鎖功能。
SQLite數(shù)據(jù)庫;人機交互;MVC;二分查找;解屏
在信息化建設進程的不斷推進過程中,移動智能手持設備已經成為人們獲取網(wǎng)絡信息的主要手段之一。移動智能終端設備的出現(xiàn),改變了人們的生活方式,如使用終端設備進行網(wǎng)絡購物,游戲娛樂,分享感受,發(fā)布照片等等。由于智能設備的輸入大部分采用電容式觸摸屏技術,為防止用戶將設備貼身出現(xiàn)誤操作等一系列異常情況的出現(xiàn),因此,在移動智能終端系統(tǒng)中設計實現(xiàn)解鎖屏功能十分必要。通過對眾多解鎖屏軟件的分析,當前該功能主要通過預設定一串數(shù)字字符串作為密碼,在解屏的時候,用戶點擊數(shù)字鍵或者滑動等所輸入的符號來與原字符串進行匹配,該方式存在的弊端主要體現(xiàn)在人機交互性差,主要表現(xiàn)在密碼值的唯一性,因此,文中基于Android操作系統(tǒng),設計實現(xiàn)隨機產生英語單詞作為密碼的方式實現(xiàn)密碼值的多樣化,以表現(xiàn)在解鎖方面的交互性能。
1.1Android平臺
Android平臺的開源特性得到了很多廠商的支持,是目前手持設備終端應用廣泛的操作系統(tǒng),根據(jù)眾多文獻資料和系統(tǒng)源程序的分析,可以得出,Android系統(tǒng)基于Linux內核擴展,形成數(shù)據(jù)應用及系統(tǒng)服務、應用程序框架服務和人機交互應用程序等系統(tǒng)架構方式,如圖1所示[1]。程序人員根據(jù)用戶的需求,在系統(tǒng)構架的基礎上,可以設計和開發(fā)各種基于Android平臺的應用程序。
圖1 Android系統(tǒng)架構圖
1.2SQLite數(shù)據(jù)庫
數(shù)據(jù)庫為應用程序提供數(shù)據(jù)支持,在計算機應用程序中應用廣泛。眾多的數(shù)據(jù)庫系統(tǒng)管理軟件中,關系數(shù)據(jù)庫SQLite基于其嵌入式設計目標,具有的微小輕型、占用資源少等特性,同時,該數(shù)據(jù)庫支持關系數(shù)據(jù)庫中的增刪改查、建立索引該、創(chuàng)建視圖等幾乎所有的功能,并且可以和多種計算機語言相結合,如Java,C#等高級語言[2]。
由于在Android系統(tǒng)應用程序往往需要有數(shù)據(jù)的支持,SQLite數(shù)據(jù)庫占用資源少的特性,因此在Android系統(tǒng)通常使用它為應用程序的提供數(shù)據(jù)支持,如在眾多Android瀏覽器應用軟件中,使用SQLite數(shù)據(jù)庫存儲用戶的歷史瀏覽記錄、用戶對地址的收藏等操作。
1.3解鎖屏原理
當Android系統(tǒng)啟動后,系統(tǒng)將使用類PhoneWindowManager來管理Android系統(tǒng)中將要初始化的KeyGuardViewMediator類,然后調用該類的SystemReady()方法調用鎖屏的流程,當時間延遲符合所設置的條件的時候,將調用KeyGuardViewMediator類的onSystemReady()方法開始鎖屏操作,并且在鎖屏操作之前判斷是否有第三方鎖屏應用的文件,如果沒有則調用showLocked()函數(shù),讓handler發(fā)送顯示鎖屏信息或延時處理,handler接收消息,直接調用handleShow()方法,從而實現(xiàn)系統(tǒng)的鎖屏操作。
2.1構架設計
遵從Android系統(tǒng)應用的結構,應用程序框架采用MVC (Model-View-Controller)模式[3],實現(xiàn)模型與視圖層之間的代碼分離,增強應用程序的可擴展性和易維護性能,如圖2所示。
圖2 應用程序三層構架設計圖
1)視圖表現(xiàn)層。視圖層主要使用XML文件保存操作界面的樣式,使之與Android應用程序的資源文件路徑(RES/ LAYOUT)一致,以XML文件形式體現(xiàn),并且在該文件中設置好布局樣式(Layout)。用戶在操作的過程中,若要修改布局中的內容,或者更改控件的相關屬性,可以通過程序調用Android API提供的getViewById()方法進行設置,如此可以增強邏輯結構,將視圖層與數(shù)據(jù)事務等操作的分離。
2)業(yè)務邏輯層。該層為整個應用程序的核心,首先通過Service監(jiān)聽用戶的操作狀態(tài),然后判斷是否啟動程序,如是否調用android.intent.action.SCREEN_ON來激活屏幕等操作。調用隨機抽取數(shù)據(jù)庫中的記錄以生成相關問題,等待用戶的響應,最后為處理相關信息調用相關事務,因此,該層為信息處理中心與用戶交互的中間層。
3)數(shù)據(jù)持久層。為給解屏增強交互性,需要不斷地從數(shù)據(jù)庫中抽取相關信息呈現(xiàn)給用戶,讓用戶經過思考后給出相應的答案,以輸入的方式來驗證答案的正確性,因此,數(shù)據(jù)持久層的設計非常重要。在應用程序中,采取關系對象映射技術,將關系數(shù)據(jù)庫中對應的記錄轉換成面向對象編程語言中的對象,如此為開發(fā)人員提供對象的方式實現(xiàn)對數(shù)據(jù)的訪問、操作SQLite數(shù)據(jù)庫中的數(shù)據(jù)。
2.2整體流程設計
根據(jù)Android系統(tǒng)設計的解鎖屏技術原理[4],系統(tǒng)將使用類PhoneWindowManager來管理Android系統(tǒng)中的KeyGuardViewMediator類,以此為切入點,調用該類的SystemReady()方法調用鎖屏的流程,當時間延遲符合所設置的條件的時候,將調用KeyGuardViewMediator類的onSystemReady()方法開始鎖屏操作,并且在鎖屏操作之前判斷是否有第三方鎖屏應用的文件,如果沒有則調用showLocked()函數(shù),讓handler發(fā)送顯示鎖屏信息或延時處理,handler接收消息,直接調用handleShow()方法,從而實現(xiàn)系統(tǒng)的鎖屏操作。如圖3所示。
圖3 應用程序整體功能構架
2.3數(shù)據(jù)庫設計
應用程序中數(shù)據(jù)庫主要保存英語詞匯,在解鎖屏幕的時候,隨機抽取某一個單詞的各中文含義,提供輸入界面讓用戶對其單詞進行拼寫,從而達到人機交互的目的。因此數(shù)據(jù)庫中需要設計保存英文詞匯的數(shù)據(jù)表,為擴充詞匯量,設計詞匯更新日志表記錄當前詞匯量狀況,以便及時通過網(wǎng)絡向詞匯表中補充單詞,關系結構可表示為表1和表2所示。
3.1加載數(shù)據(jù)
建立與數(shù)據(jù)庫的連接:
db=(new DatabaseHelper(getContext()).getWritableDatabase();
表1 詞匯表的結構
表2 詞匯更新日志表結構
關閉數(shù)據(jù)庫連接:db.close();
3.2屏蔽原解鎖界面
在用戶點擊按鈕觸發(fā)界面點亮,應用程序監(jiān)聽到該事件的觸發(fā)后,啟動PemoLickService服務,調用keyguardManage()方法,禁用設備原來的鎖屏活動界面(StudyPemoPatternActivity),以展示應用程序自定義屏幕解鎖界面[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啟用自定義解鎖界面
啟用自定義解鎖界面的關鍵代碼為[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交互式處理的實現(xià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();}}};}
經過測試,該應用程序能正常執(zhí)行。如圖4所示。
圖4 程序運行效果圖
在測試過程中,本應用程序的關鍵在于提取SQLite數(shù)據(jù)庫中數(shù)據(jù)的耗時情況,其統(tǒng)計記錄如圖5所示。
實驗結果分析,由于程序中使用單個數(shù)據(jù)表,在執(zhí)行查詢時,使用隨機查詢方式[7]:select*from vocabulary order by RANDOM()limit 1
圖5 讀取SQLite數(shù)據(jù)庫中數(shù)據(jù)的耗時
以上SQL語句的執(zhí)行中,根據(jù)數(shù)據(jù)表主鍵ID遞增的順序,由SQLite的兩種檢索數(shù)據(jù)方式中的二分查找可以快速抽取出數(shù)據(jù),因此在檢索中消耗時間相差較小。
該應用程序以幫助在校學生群體的用戶記憶英文單詞為目的,對Android系統(tǒng)鎖屏功能進行了改進,設計實現(xiàn)了依據(jù)英文單詞的含義,對英文單詞填空的交互式屏幕解鎖功能,實驗測試表明,本方案可以對傳統(tǒng)解鎖模式中密碼單一性向多樣化擴展,具有一定的實用價值。以此推廣,可以為其他的用戶群體服務為目的而設計相應的解鎖程序,由此,對應用程序的功能拓展、資源占有、SQLite查詢優(yōu)化等問題還可以作進一步的研究。
[1]馮玉平,王曙光.基于Android的手機定位軟件[J].計算機與現(xiàn)代化,2015(2):11-13.
[2]林培杰,朱安南,程樹英.Android數(shù)據(jù)庫SQLite性能優(yōu)化[J].計算機系統(tǒng)應用,2014(12):193-196.
[3]鄭行雙.基于MVC的Android與Web雙模式教學平臺的設計與實現(xiàn)[D].大連:大連理工大學,2013.
[4]王艷敏,李永忠,呂少偉.Android平臺下文件透明加密技術的研究與實現(xiàn)[J].計算機技術與發(fā)展,2014(8):137-140.
[5]張慶陽,楊陽,程久軍,等.基于手機動態(tài)密碼的計算機使用權限管理機制[J].信息網(wǎng)絡安全,2014(8):46-51.
[6]石艷敏.一種高效的計算機聯(lián)鎖軟件測試方法[J].鐵路計算機應用,2013(12):50-54.
[7]沈美,于翔.基于SQLite數(shù)據(jù)庫的安卓日程管理系統(tǒng)的設計與開發(fā)[J].電子技術與軟件工程,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稿件編號:201507085
四川省教育廳項目(15ZB0324)
賀建英(1979—),女,四川簡陽人,碩士,講師。研究方向:軟件技術,數(shù)據(jù)挖掘,物聯(lián)網(wǎng)。