林莉蕓 曾雪松
(信陽職業技術學院 數學與計算機科學學院,河南 信陽 464000)
?
Android中基于回調接口的確權機制
林莉蕓曾雪松
(信陽職業技術學院 數學與計算機科學學院,河南 信陽 464000)
對Android系統中的回調接口的確權機制做簡要介紹,對基于回調接口的確權機制做深入討論,最后結合實際情況,給出Android應用的開發流程圖。
Android;回調;接口;確權
不管是桌面應用還是手機應用程序,面對最多的就是用戶,經常需要處理的就是用戶動作,也就是需要為用戶的動作提供響應。這種為用戶動作提供響應的機制就是確權機制。隨著移動互聯網的飛速發展,手機應用越來越豐富,在應用安裝運行的同時,它們就擁有了一些搜集手機數據的權限,在豐富我們生活的同時,個人的隱私也隨之有可能遭到泄露。在不知不覺中,大量的應用都在截取著我們在互聯網上的消費信息和消費習慣。那么如何避免個人的過多信息遭到泄露呢?從Android 4.4開始引入了權限管理機制。
所謂權限管理,就是能夠手動配置某個App的權限,進而阻止惡意軟件以及防止隱私泄漏。當然,更進一步的權限管理,是能夠在App動態使用某個權限的時候,提供一直通知機制提示用戶允許和拒絕。這樣的權限管理就更加類似于Windows中的主動防御。
目前Android默認的權限管理方法是:檢測應用操作權限請求,構造一個AlertDialog對象供用戶選擇。用戶有三種選擇:允許、拒絕和忽略。Android系統設備根據用戶的選擇來決定應用此次操作的權限:要么允許此次操作,要么阻止此次操作,要么忽略。這種彈框機制不但與OS 5.0系統風格不符,而且會造成多個AlertDialog堆積在一起,用戶要一個個自上而下地確權,不能一目了然地看到系統當前所有的權限申請。
在實際實訓項目實現上采用了基于回調接口的新的確權機制,用自定義的view代替了系統采用的AlertDialog,新機制能大大改善用戶體驗,符合OS 5.0風格。
回調就是當主程序需要的時候(或者到預定義狀態值)調用的接口實現類。接口實際上是不能被直接調用的,我們能調用的一定不是接口或者抽象類。
回調接口的很多應用場景是出現在以接口類型為參數的情況下,以匿名內部類的方式傳入而達到。
例如,假設有一個Java的API方法叫作(其中的ClickEvent就是一個接口)public void addEventListener(ClickEvent evt),那么,你在調用的時候就可以這樣:
addEventListener(new ClickEvent(){
//在這里實現接口中的方法
});
當發生某事件時,API的addEventListener方法就會被組件調用,從而所完成的匿名內部類代碼就會被組件執行。
例如,客戶程序C調用服務程序S中的某個函數A,然后S又在某個時候反過來調用C中的某個函數B,對于C來說,這個B便叫做回調函數。像Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名誰,所以S會約定B的接口規范(函數原型),然后由C提前通過S的一個函數R告訴S自己將要使用B函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程服務器程序。
當應用有權限請求時,權限管理服務會通過Binder調用到SystemUI中注冊的回調接口,回調接口構造一個自定義的view對象并呈現給用戶,用戶確權后通過Binder將確權結果傳給權限管理服務。權限管理服務進而將結果返回給申請權限的客戶端,客戶端根據確權結果繼續以下的流程。
所有的權限請求以自定義的View顯示,自定義View以List的形式通過狀態欄彈出,能讓用戶一覽無余,隨意選擇對哪個請求操作作出回應。而并非像在原生狀態下機械地按順序操作。
JAVA方法回調是功能定義和功能實現分享的一種手段,是一種耦合設計思想。作為一種架構,必須有自己的運行環境,并且提供用戶的實現接口。
(1)定義接口 Callback,包含回調方法callback()
(2)在一個類Caller中聲明一個Callback接口對象mCallback
(3)在程序中賦予 Caller對象的接口成員(mCallback) 一個內部類對象如
new Callback(){
callback(){
//函數的具體實現
}
}
這樣,在需要的時候,可用Caller對象的mCallback接口成員調用callback()方法,完成回調。
例如,Android設備構造狀態欄PhoneStatusBar時,實例化一個自定義的View對象PermissionsCheckPanelView,該對象代表著權限申請提示框。同時該View對象又是CheckPermissionCallback類的一個成員變量。
通過IOnCallbackAddRequest接口類將CheckPermissionCallback和AppOpsService連接起來,當有權限請求操作時,AppOpsService的askOperationLocked方法被調用,在askOperationLocked方法中調用IOnCallbackAddRequest接口中的onAddRequest方法。進而會調用到CheckPermissionCallback中的該方法,CheckPermissionCallback對該方法做了實現。實現的本質就是發送消息MSG_CTRLALL_PERMISSION_CHECK_PANEL,在該消息的處理中構造一個PermissionsCheckPanelView對象并顯示出來。該對象代表著權限申請提示框。PermissionsCheckPanelView對象已實現OnTouchListener和OnItemClickListener接口,可以響應用戶的選擇操作。當用戶作出選擇或者等待15秒后,SystemUI會通過Binder調用AppOpsService的pushRequestChoice方法。在該方法中將用戶的選擇結果做處理,如用戶選擇記住時,需要將確權結果寫進appops.xml文件。最后將確權結果通過Binder傳回給申請權限的客戶端,客戶端根據結果繼續下面的流程。以下是確權流程詳細圖示。

Android應用需要運行在手機上,手機與傳統的計算機相比存儲能力、計算能力有限,因此Android應用更適合作為客戶端軟件來使用。作為客戶端應用程序,手機更能充分發揮它的攜帶方便的優勢,可以隨時隨地開機運行程序,而且可以隨時訪問網絡,通過網絡與服務器交互。
[1]董曉剛.Android中基于回調機制的事件處理[J].中國電子商務,2013,(13).
[2]李楊.基于Android的多媒體應用開發與研究[J].計算機與現代化,2011,(4).
[3]韓超.基于Android經典應用開發[M].北京:人力資源出版社,2011.
[4]劉平.Android手機訪問服務器的一種數據交互方法[J].電子設計工程,2010,(9).
責任編輯:柴造坡
10.3969/j.issn.1674-6341.2016.04.015
2016-03-31
林莉蕓(1978—),女,河南駐馬店人,碩士,講師。研究方向:網絡與多媒體技術、軟件技術。
TP316
A
1674-6341(2016)04-0033-02