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