本發(fā)明屬于安卓設(shè)備管控技術(shù)領(lǐng)域,尤其涉及一種攝像頭管控方法。
背景技術(shù):
安卓(android)系統(tǒng)作為自由及開放源代碼的操作系統(tǒng),近幾年大量使用在智能設(shè)備,如智能手機和平板電腦上,用智能手機進行拍照、攝像更是成為了人們生活的一部分。但眾多軍事、高科技、宗教、文化等場所,出于保密、專利等需求,音頻資料必須受到嚴格管控,“嚴禁拍照”是最基本的規(guī)則之一。通過禁止攜帶智能手機可以達到一定程度的管控,但會浪費大量的人力物力,費時費力,而且不能做到一刀切的效果。如何妥善處理智能手機與攝像管控的矛盾,是多家部門、單位和企業(yè)等的迫切需求。
現(xiàn)有技術(shù)中,目前主流的智能手機攝像頭管控方法,僅對系統(tǒng)自帶攝像app有效,在沒有安裝第三方帶攝像功能的情況下效果尚可。但隨著各種app的大量豐富,不僅各種專門的攝像app層出不窮,而且各種帶攝像功能的app更是數(shù)不勝數(shù)。更有多種原本不帶攝像功能app,在升級更新后又可能具有了該功能,讓傳統(tǒng)的方法不再有效。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于;提供一種基于設(shè)備管理器實現(xiàn)安卓智能設(shè)備攝像頭的管控方法,以解決隨著各種帶攝像app的大量豐富,傳統(tǒng)方法已不能有效管控手機攝像頭的技術(shù)問題,本發(fā)明利用設(shè)備管理器對攝像頭進行管控,無論是系統(tǒng)自帶app,還是任何第三方app,都能進行全方位覆蓋,令其拍照、攝像功能完全失效,但完全不影響安卓智能手機其他功能,滿足多種場合的不同需求。
本發(fā)明采用的技術(shù)方案如下:
一種基于設(shè)備管理器實現(xiàn)安卓智能設(shè)備攝像頭的管控方法,包括以下步驟:
步驟一:激活設(shè)備管理器,并獲取設(shè)備管理器實例,以獲得攝像頭的控制權(quán)限;
步驟二:獲取設(shè)備策略管理器實例;
步驟三:檢測設(shè)備管理器對攝像頭的控制權(quán)限是否激活,否則,利用startactivity()彈出設(shè)備管理器權(quán)限激活窗口以激活設(shè)備管理器對攝像頭的控制權(quán)限;
步驟四:設(shè)備管理器對攝像頭的控制權(quán)限激活后,利用設(shè)備策略管理器實例調(diào)用攝像頭管控接口,以打開或者關(guān)閉攝像頭。
進一步的,步驟一中,獲得攝像頭的控制權(quán)限的詳細過程包括:
a.注冊一個admin,得到一個admin管理員權(quán)限;
b.通過admin管理員權(quán)限調(diào)用devicepolicymanager方法,進一步獲取管控攝像頭的權(quán)限。
進一步的,步驟二中,獲取設(shè)備策略管理器實例的詳細過程包括:
a.在manifest.xml中注冊一個廣播接收者;
b.通過廣播來獲取激活設(shè)備管理器列表;
c.在獲得的設(shè)備管理器列表中找到對應的攝像頭控制選項,從而獲得設(shè)備策略管理實例。
進一步的,步驟三中,激活設(shè)備管理器對攝像頭的控制權(quán)限的詳細過程包括:
a.創(chuàng)建一個廣播接收者;
b.創(chuàng)建布局文件,對廣播接收者進行定義;
c.定義broadcastreceiver-devicemanangerbc,使之繼承deviceadminreceiver來給廣播接收者獲取權(quán)限;
d.在androidmanifest.xml文件中注冊broadcastreceiver來激活設(shè)備管理器權(quán)限。
進一步的,步驟四中,調(diào)用攝像頭管控接口打開或者關(guān)閉攝像頭的詳細過程包括:
a.在res/xml/device_admin.xml中聲明攝像頭管理策略,并在androidmanifest引用xml策略聲明;
b.創(chuàng)建一個設(shè)備管理的廣播接收端,以接收與聲明的攝像頭管理策略有關(guān)的事件通知,有選擇地重寫回調(diào)函數(shù);
c.根據(jù)請求的攝像頭管理策略來配置設(shè)備策略管理器,以調(diào)用攝像頭管控接口打開或者關(guān)閉攝像頭。
進一步的,步驟四中,當設(shè)備管理器對攝像頭的控制權(quán)限被用戶設(shè)為禁用時,已配置好的攝像頭限制策略就會從共享偏好設(shè)置中擦除。
進一步的,檢測設(shè)備管理器對攝像頭的控制權(quán)限是否激活的實現(xiàn)步驟包括:
a.在androidmanifest.xml中注冊一個廣播類,用于監(jiān)聽權(quán)限的變化;
b.創(chuàng)建管理權(quán)限的清單;
c.創(chuàng)建廣播類deviceadminreceiver繼承deviceadminreceiver,并且實現(xiàn)相應的方法;
d.激活相關(guān)管理權(quán)限的操作。
綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是;
本發(fā)明方法利用安卓系統(tǒng)設(shè)備管理器對攝像頭進行管控,管控級別高,無論系統(tǒng)自帶app還是第三方app均在管控范圍內(nèi),能夠令其拍照、攝像功能完全失效,無法避開此方法而使用攝像頭;并且該方法對安卓智能手機其他功能無影響,不會為用戶帶來其他的不便,滿足多種場合的不同需求。
附圖說明
圖1是本發(fā)明的方法步驟示意圖。
具體實施方式
本說明書中公開的所有特征,除了互相排斥的特征和/或步驟以外,均可以以任何方式組合。
下面結(jié)合圖1對本發(fā)明作詳細說明。
步驟一:激活設(shè)備管理器,并獲取設(shè)備管理器實例,以獲得攝像頭的控制權(quán)限;
(1)獲取設(shè)備管理器的實例的方法為;android在實現(xiàn)設(shè)備管理器時,首先需要在manifest.xml中注冊一個廣播接收者。
(2)通過步驟(1)中的方法獲取已經(jīng)激活的設(shè)備管理器列表mactiveadmins,并返回mactiveadminssetting的設(shè)備管理器列表。獲取所有注冊了deviceadminreceiver.action_device_admin_enabled即android.app.device_admin_enabledaction的廣播接收者列表avail。如果應用注冊了包含該action的廣播接收者并且激活了設(shè)備管理器,就會在setting的設(shè)備管理器列表中顯示。
(3)注冊android.app.action.device_admin_enabledaction的應用激活為設(shè)備管理器。反編譯。接通過devicepolicymanager獲得的已經(jīng)激活的設(shè)備管理器列表a和通過遍歷注冊了android.app.action.device_admin_enabledaction的列表b進行對比,如果發(fā)現(xiàn)列表a中的設(shè)備管理器沒有在列表b中出現(xiàn),就調(diào)用如下代碼彈出取消激活的activity,讓用戶手動取消。
找到利用這個漏洞的設(shè)備管理器后直接調(diào)用devicepolicymanager的removeactiveadmin方法取消激活,該方法需要system以上權(quán)限才能執(zhí)行。
deviceadminsettings中獲取異常,用正常的設(shè)備管理器程序安裝,正常激活,然后刪除該程序的meta-data配置,生成apk,以更新安裝的形式安裝到android設(shè)備上。設(shè)備管理器注冊了android.app.action.device_admin_enabled,所以使用上述的設(shè)備管理漏洞補丁。
從上面對于設(shè)備管理器漏洞補丁apk的分析可以得出兩種取消激活的方法分析:
一、devicepolicymanager獲得的已經(jīng)激活的設(shè)備管理器列表,啟動取消激活的activity。測試結(jié)果是行不通的,因為deviceadminadd也需要解析meta-data中的信息。
二、獲取到激活的設(shè)備管理器列表后,可以直接調(diào)用devicepolicymanager的removeactiveadmin方法取消激活,測試結(jié)果成功,但是需要system以上的權(quán)限。使用正常的apk激活設(shè)備管理器,然后使用異常的apk避免設(shè)備管理器被取消。
步驟二:利用getsystemservice()獲取設(shè)備策略管理器實例;
首先android平臺通過設(shè)備管理api提供了系統(tǒng)級的設(shè)備管理能力。如何獲取一個設(shè)備管理器實例,其方法在于:
(1)定義并聲明策略
首先定義一種在功能層面提供支持的策略,這個聲明的策略對應于devicepolicymanager中的一些相關(guān)設(shè)備的策略方法,例如定義最小密碼長度或最小大寫字母數(shù)量。如果一個程序嘗試調(diào)用在xml中沒有對應策略的方法,這會將在運行時導致一個securityexception異常。程序使用強制鎖作為設(shè)備管理員激活處理的一部分,聲明策略的列表將會在系統(tǒng)屏幕上顯示給用戶。
(2)創(chuàng)建一個設(shè)備管理的廣播接收者
創(chuàng)建一個設(shè)備管理的廣播接收者,它能接收到與聲明支持的策略有關(guān)的事件的通知。一個程序可以有選擇地重寫回調(diào)函數(shù)。
在同樣的程序中,deviceadmin,當設(shè)備管理員(deviceadministrator)賬戶被用戶設(shè)置為禁用時,配置好的策略就會從sharedpreference中擦除。應該考慮實現(xiàn)與應用情況有關(guān)的業(yè)務邏輯。例如,程序可能會采取一些行動來減輕安全風險,比如通過結(jié)合實現(xiàn)刪除設(shè)備上的敏感數(shù)據(jù),禁用遠程同步,提醒管理員。
如果選擇"activate",程序就會成為設(shè)備管理員并且可以開始配置及強制執(zhí)行策略。
該程序也需要做好處理用戶放棄激活的重置狀態(tài)的準備,比如點擊“取消”按鈕,返回鍵或者home鍵。因此策略設(shè)置activity中的onresume()方法需要有業(yè)務邏輯來重新評估這種情況,并展現(xiàn)給用戶設(shè)備管理激活選項給用戶,如果有必要的話。
(3)實現(xiàn)設(shè)備策略控制器
在設(shè)備管理員被成功激活后,程序就會根據(jù)請求的策略來配置設(shè)備策略管理器。要記住新的策略在每次發(fā)布時都要在android中添加好。程序中做好平臺版本檢查,來檢測新的策略能否被老版本平臺很好的支持。
這樣程序就可以執(zhí)行策略了。通過設(shè)備策略管理器(devicepolicymanager)api可以判定目前的密碼是否適用于請求的策略。設(shè)備管理(deviceadministration)api不會自動改正。
步驟三:檢測設(shè)備管理器對攝像頭的控制權(quán)限是否激活,否則,利用startactivity()彈出設(shè)備管理器權(quán)限激活窗口以激活設(shè)備管理器對攝像頭的控制權(quán)限;
檢測是否開啟設(shè)備管理器設(shè)備,其方法在于:
檢查設(shè)備管理器時候激活,需要運用到三個類;
devicepolicymanager,需要配合deviceadminreceiver來使用。
deviceadminreceiver該類繼承broadcastreceiver。實現(xiàn)了一個onreceiver方法,該方法中根據(jù)不同的action,執(zhí)行相應的操作。如果激活成功,那么action就是action_device_admin_enabled,據(jù)此調(diào)用onenabled方法。
deviceadmininfo實現(xiàn)步驟:
a.在androidmanifest.xml中注冊一個廣播類,用于監(jiān)聽權(quán)限的變化;
b.創(chuàng)建管理權(quán)限的清單;在res的文件夾下創(chuàng)建xml文件夾,再創(chuàng)建lockourscreen.xml;
c.創(chuàng)建廣播類deviceadminreceiver繼承deviceadminreceiver并且實現(xiàn)相應的方法;
d.激活相關(guān)管理權(quán)限的操作;
上述利用設(shè)備管理器實例調(diào)用攝像頭管控接口打開或者關(guān)閉攝像頭,其方法在于,使用mediastore.action_image_capture啟動安裝在手機上的攝像頭應用程序
現(xiàn)在使用startactivityforresult()函數(shù)推出活動,并等待它的結(jié)果。它的語法下面給出,startactivityforresult(intent,0)這種方法已在活動activity類被定義。
其結(jié)果可以通過覆蓋onactivityresult()方法獲得。
(1)使用eclipseide創(chuàng)建android應用程序,并將其命名為camera。在創(chuàng)建這個項目,確保目標sdk編譯在androidsdk中的最新版本或使用更高級別的api。
修改src/mainactivity.java文件中添加意圖啟動活動代碼,由result方法來接受輸出;
修改res/values/strings.xml定義所需的常量值;
運行應用程序并選擇運行android設(shè)備,并在其上安裝的應用和驗證結(jié)果。
(2)直接使用應用程序提供的android攝像頭api
使用照相機api給攝像機整合在應用中;
首先,需要使用靜態(tài)方法通過apicalledcamera.open提供并初始化相機對象。它的語法如下:cameraobject=null;object=camera.open();
getcamerainfo(intcameraid,camera.camerainfocamerainfo)它返回一個特定攝像機信息;
getnumberofcameras()它返回限定的可用的設(shè)備上的照相機的整數(shù);
lock()它被用來鎖定相機,所以沒有其他應用程序可以訪問它;
release()它被用來釋放在鏡頭鎖定,所以其他應用程序可以訪問它;
open(intcameraid)它是用來打開特定相機時,支持多個攝像機;
enableshuttersound(booleanenabled)它被用來使能/禁止圖像俘獲的默認快門聲音;
需要做一個獨立的類和surfaceview擴展它并實現(xiàn)surfaceholder接口。
已經(jīng)使用的兩種類具有以下目的:
camera它是用來控制攝像機和拍攝圖像或從相機拍攝的視頻;
surfaceview這個類是用來展示實時攝像頭預覽給用戶;
必須調(diào)用攝像機類的預覽方法來啟動攝像機的預覽給用戶;
可以使用照相機api提供的其它功能中設(shè)置的攝像機的其它選項;
startfacedetection()此功能啟動人臉檢測相機;
stopfacedetection()它是用來阻止其通過上述功能啟用的臉部檢測;
startsmoothzoom(intvalue)這需要一個整數(shù)值,并調(diào)整攝像機的焦距非常順暢的值;
stopsmoothzoom()它是用來阻止攝像機的變焦;
stoppreview()它是用來阻止相機的預覽給用戶;
takepicture(camera.shuttercallbackshutter,camera.picturecallbackraw,camera.picturecallbackjpeg)它被用來使能/禁止圖像拍攝的默認快門聲音。
步驟四:設(shè)備管理器對攝像頭的控制權(quán)限激活后,利用設(shè)備策略管理器實例調(diào)用setmicrophonemute()打開或者關(guān)閉攝像頭。
(1)搭建最新的androidos實際的移動設(shè)備,因為攝像機不支持模擬器;
steps描述:
1、使用androidstudio創(chuàng)建android應用程序,并將其命名為;camera。在創(chuàng)建這個項目,確保目標sdk和編譯在androidsdk的最新版本或使用更高級別的api。
2、修改src/mainactivity.java文件引用添加攝像機的代碼,并獲得了xml的組件
3、創(chuàng)建一個新的文件showcamera.java使用surfaceview擴展和實現(xiàn)surfaceholder接口。
4、修改所需的布局xml文件res/layout/activity_main.xml添加gui組件。在這里我們只添加frameview,一個按鈕和一個imageview。
5、修改res/values/strings.xml定義所需的常量值。
6、修改androidmanifest.xml如下圖所示,添加必要的權(quán)限攝像機。
7、運行應用程序并選擇運行android的設(shè)備,并在其上安裝的應用和驗證結(jié)果。
本發(fā)明方法利用安卓系統(tǒng)設(shè)備管理器對攝像頭進行管控,管控級別高,無論系統(tǒng)自帶app還是第三方app均在管控范圍內(nèi),能夠令其拍照、攝像功能完全失效,無法避開此方法而使用攝像頭;并且該方法對安卓智能手機其他功能無影響,不會為用戶帶來其他的不便,滿足多種場合的不同需求。
本發(fā)明中涉及的安卓智能設(shè)備包括手機、平板等設(shè)備。
通過以上實施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明以軟件的方式來實現(xiàn)。雖然通過實施例描述了本發(fā)明,本領(lǐng)域的技術(shù)人員知道,本發(fā)明有很多變形和變化而不能脫離本發(fā)明的精神,一樣受本發(fā)明的權(quán)利要求保護。本發(fā)明未詳細闡述的部分屬于本領(lǐng)域公知技術(shù),本領(lǐng)域技術(shù)人員根據(jù)已有的描述已能夠在不付出創(chuàng)造性勞動的前提下進行實施,因此,不再贅述。