本發(fā)明涉及移動(dòng)互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種基于安卓移動(dòng)終端的短信監(jiān)控系統(tǒng)以及實(shí)現(xiàn)方法。
背景技術(shù):
在移動(dòng)網(wǎng)絡(luò)廣泛覆蓋和智能手機(jī)高度普及的時(shí)代,人們的生活方式為之改變。身處移動(dòng)智能時(shí)代,人們不再受到時(shí)間和空間制約,可以隨心所欲地與朋友交流聯(lián)系,隨時(shí)隨地獲取信息。在需要專業(yè)監(jiān)控的工程領(lǐng)域,用戶希望能夠減少人力成本?!霸谌我鈺r(shí)刻都能夠查看到監(jiān)視畫面”,是大多數(shù)使用監(jiān)控系統(tǒng)的客戶的需求。另一方面,智能手機(jī)的迅猛發(fā)展與普及,使客戶或多或少對(duì)手機(jī)產(chǎn)生了一定的依賴。手機(jī)一旦不在身邊,客戶很可能就錯(cuò)過一些重要的信息,給客戶的生活造成麻煩。很多人“機(jī)不離手”,一旦離開手機(jī),便感到無所適從,甚至產(chǎn)生了一種新的癥狀——手機(jī)恐慌癥。
在安卓手機(jī)大行其道,視頻監(jiān)控進(jìn)入3G移動(dòng)時(shí)代,GPS不斷小型化、成為智能手機(jī)的標(biāo)準(zhǔn)配備的背景下,將移動(dòng)視頻監(jiān)控和GPS手機(jī)定位技術(shù)結(jié)合起來,以SMS作為控制和獲取參數(shù)的媒介,以MMS作為監(jiān)控視頻的載體,開發(fā)安卓移動(dòng)平臺(tái)短信控制系統(tǒng)有著廣泛的應(yīng)用前景。
目前針對(duì)監(jiān)控系統(tǒng)和手機(jī)依賴的需求,存在如下缺陷:
1)無法通過最小化人力成本,實(shí)時(shí)獲取/查看監(jiān)視畫面,
2)無法在手機(jī)未進(jìn)行攜帶時(shí),及時(shí)提醒從而不錯(cuò)過重要的信息。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是,1)通過手機(jī)對(duì)手機(jī)的短信控制視頻監(jiān)控,可以隨時(shí)隨地獲取遠(yuǎn)程手機(jī)拍攝視頻信息,結(jié)合手機(jī)GPS定位追蹤,可以實(shí)現(xiàn)對(duì)遠(yuǎn)程手機(jī)位置、環(huán)境的實(shí)時(shí)監(jiān)控;2)通過附加手機(jī)通訊狀態(tài)訪問,可以避免手機(jī)不在身邊錯(cuò)過重要信息。3)通過將重要信息即時(shí)發(fā)送到指定微信賬戶,實(shí)現(xiàn)了無障礙、跨系統(tǒng)的遠(yuǎn)程監(jiān)控和即時(shí)查看。
解決上述技術(shù)問題,本發(fā)明提供了基于約定短信的微信遠(yuǎn)程移動(dòng)監(jiān)聽和回傳系統(tǒng),包括:監(jiān)控端和被監(jiān)控端,
所述被監(jiān)控端被配置為,監(jiān)聽預(yù)置信息,并判斷所述預(yù)置信息是否有進(jìn)行過匹配;所述預(yù)置信息,作為存放于數(shù)據(jù)庫(kù)中的至少包括:監(jiān)聽號(hào)碼及預(yù)約短信內(nèi)容的一條記錄,
若所述預(yù)置信息為未進(jìn)行過匹配,則獲得短信內(nèi)容和該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人,并在所述數(shù)據(jù)庫(kù)中進(jìn)行匹配;
若所述預(yù)置信息為匹配過:監(jiān)聽號(hào)碼授權(quán)且預(yù)約短信內(nèi)容判斷為監(jiān)聽短信時(shí),則所述監(jiān)控端按照設(shè)定的類型代碼對(duì)應(yīng)執(zhí)行監(jiān)控指令,完成監(jiān)控。
更進(jìn)一步,短信監(jiān)控系統(tǒng)還包括:在判斷所述預(yù)置信息是否有進(jìn)行過匹配前:
根據(jù)上述該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人獲得發(fā)信號(hào)碼,
將所述發(fā)信號(hào)碼與所述數(shù)據(jù)庫(kù)中預(yù)先注冊(cè)的授權(quán)列表中的號(hào)碼名單進(jìn)行比對(duì),
若與授權(quán)列表中的電話號(hào)碼名單匹配,則發(fā)信人有權(quán)監(jiān)聽,監(jiān)聽狀態(tài)位參數(shù)為真;
在存儲(chǔ)注冊(cè)用戶手機(jī)號(hào)碼表和/或注冊(cè)用戶監(jiān)聽密碼表的數(shù)據(jù)庫(kù)中檢查監(jiān)聽狀態(tài)位參數(shù)是否為真,若為真則將短信內(nèi)容與所述注冊(cè)用戶監(jiān)聽密碼表中的名單進(jìn)行匹配,匹配成功后接受監(jiān)聽信息,
如果不匹配,則短信為普通短信。
更進(jìn)一步,當(dāng)所述被監(jiān)控端接受監(jiān)聽短信之后,向監(jiān)控端發(fā)送提示短信:
匹配成功,
和/或,回復(fù)1獲取攝像頭拍照照片,
和/或,回復(fù)2獲取GPS坐標(biāo),
和/或,回復(fù)3獲取未接來電信息,
和/或,回復(fù)4獲取未查短信信息,
和/或,回復(fù)5獲取聯(lián)系人信息,
和/或,回復(fù)6取消監(jiān)。
更進(jìn)一步,所述被監(jiān)控端還被配置為建立數(shù)據(jù)存儲(chǔ)模塊,
所述數(shù)據(jù)存儲(chǔ)模塊用以,基于SQLite數(shù)據(jù)庫(kù)建立監(jiān)聽人和約定短信內(nèi)容對(duì)應(yīng)的字段,并執(zhí)行SQL注冊(cè)、查詢、刪除語句,在所述SQLite數(shù)據(jù)庫(kù)中對(duì)采集的監(jiān)聽號(hào)碼和/或約定短信數(shù)據(jù)進(jìn)行增加、刪除或者查詢。
更進(jìn)一步,所述被監(jiān)控端還被配置為建立監(jiān)聽模塊,
所述監(jiān)聽模塊包括:短信匹配單元、Gps坐標(biāo)讀取單元、來電監(jiān)聽單元、短信監(jiān)聽單元、讀取聯(lián)系人單元、短信息發(fā)送單元;
所述短信匹配單元,用以獲取來信號(hào)碼和內(nèi)容,并將來信號(hào)碼和內(nèi)容進(jìn)行匹配,以及,判斷確定來信號(hào)碼與數(shù)據(jù)庫(kù)存儲(chǔ)的記錄匹配,獲取監(jiān)聽的權(quán)限;
所述GPS坐標(biāo)讀取單元,用以每隔一定的間隔獲取一次被監(jiān)控端的位置坐標(biāo),并以將GPS坐標(biāo)以字符串作為短信內(nèi)容回復(fù)給監(jiān)聽手機(jī);
所述來電監(jiān)聽單元,用以判斷來電標(biāo)志位是否為真,如果為非真,則沒有來電,如果為真,將來電狀態(tài)以字符串作為短信內(nèi)容回復(fù)給監(jiān)聽手機(jī);
所述短信監(jiān)聽單元,用以獲取監(jiān)控端開啟監(jiān)控到被監(jiān)控端接收對(duì)應(yīng)執(zhí)行監(jiān)控指令階段,所述被監(jiān)控端收到所有的短信的內(nèi)容和收到短信的時(shí)間;
所述讀取聯(lián)系人單元,用以調(diào)用安卓移動(dòng)終端ContentProvider組件的API接口,獲取得到對(duì)應(yīng)聯(lián)系人;
所述短信息發(fā)送單元,用以通過sendTextMessage()函數(shù)發(fā)送文字短信,并向所述監(jiān)控端發(fā)送提示信息和回饋其它單元的查詢結(jié)果數(shù)據(jù)。
更進(jìn)一步,所述被監(jiān)控端還被配置為建立自動(dòng)拍照模塊,
所述自動(dòng)拍照模塊用以開啟視頻監(jiān)控,新建一個(gè)Camera類的對(duì)象用于拍照的同時(shí)調(diào)用一個(gè)延時(shí)函數(shù):在設(shè)定的延時(shí)時(shí)間后,調(diào)用Camera類的拍照函數(shù)拍照,
以及,通過文件輸出流,形成.jpg格式的照片,并把照片存放在指定路徑的內(nèi)置存儲(chǔ)卡上。
更進(jìn)一步,所述被監(jiān)控端還被配置為建立后臺(tái)彩信發(fā)送模塊
所述彩信發(fā)送模塊按照如下方式建立:
設(shè)置被監(jiān)控端接入點(diǎn)信息,
判斷Wi-fi是否啟用,若啟動(dòng)則關(guān)閉Wi-fi網(wǎng)絡(luò),
獲取當(dāng)前的APN,并向監(jiān)控端發(fā)送拍攝照片的彩信,實(shí)現(xiàn)對(duì)被監(jiān)控端的圖像監(jiān)控。
更進(jìn)一步,所述被監(jiān)控端還被配置為,通過第三方接口,將監(jiān)控的內(nèi)容轉(zhuǎn)發(fā)到指定的微信用戶。為了實(shí)現(xiàn)這一點(diǎn),我們可通過調(diào)用微信內(nèi)嵌瀏覽器定義的一個(gè)私有JavaScript對(duì)象:WeixinJSBridge,通過操作這個(gè)對(duì)象的相關(guān)方法可以實(shí)現(xiàn)分享到微信好友,和判斷一個(gè)微信號(hào)的關(guān)注狀態(tài)以及實(shí)現(xiàn)關(guān)注指定微信號(hào)等功能。將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。
基于上述,本發(fā)明還提供了基于約定短信的微信遠(yuǎn)程移動(dòng)監(jiān)聽和回傳方法,包括如下步驟:
監(jiān)聽預(yù)置信息,并判斷所述預(yù)置信息是否有進(jìn)行過匹配;所述預(yù)置信息,作為存放于數(shù)據(jù)庫(kù)中的至少包括:監(jiān)聽號(hào)碼及預(yù)約短信內(nèi)容的一條記錄,
開始監(jiān)聽,若所述預(yù)置信息為未進(jìn)行過匹配,則獲得短信內(nèi)容和該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人,并在所述數(shù)據(jù)庫(kù)中進(jìn)行匹配;
若所述預(yù)置信息為匹配過:監(jiān)聽號(hào)碼授權(quán)且預(yù)約短信內(nèi)容判斷為監(jiān)聽短信時(shí),則按照設(shè)定的類型代碼對(duì)應(yīng)執(zhí)行監(jiān)控指令,完成監(jiān)控。
更進(jìn)一步,方法還包括進(jìn)一步安全認(rèn)證步驟:
根據(jù)上述該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人獲得發(fā)信號(hào)碼,
將所述發(fā)信號(hào)碼與所述數(shù)據(jù)庫(kù)中預(yù)先注冊(cè)的授權(quán)列表中的號(hào)碼名單進(jìn)行比對(duì),
若與授權(quán)列表中的電話號(hào)碼名單匹配,則發(fā)信人有權(quán)監(jiān)聽,監(jiān)聽狀態(tài)位參數(shù)為真;
在存儲(chǔ)注冊(cè)用戶手機(jī)號(hào)碼表和/或注冊(cè)用戶監(jiān)聽密碼表的數(shù)據(jù)庫(kù)中檢查監(jiān)聽狀態(tài)位參數(shù)是否為真,若為真則將短信內(nèi)容與所述注冊(cè)用戶監(jiān)聽密碼表中的名單進(jìn)行匹配,匹配成功后接受監(jiān)聽信息,
如果不匹配,則短信為普通短信。
本發(fā)明的有益效果:
本發(fā)明中的一種基于約定短信的微信遠(yuǎn)程移動(dòng)監(jiān)聽和回傳系統(tǒng),能夠?qū)崿F(xiàn)短信控制視頻監(jiān)控,GPS定位、手機(jī)狀態(tài)查詢等功能,最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。
本發(fā)明中的基于約定短信的微信遠(yuǎn)程移動(dòng)監(jiān)聽和回傳方法,以文字短信、彩信為媒介,通過授權(quán)號(hào)碼向被監(jiān)控端的Android手機(jī)認(rèn)證短信的方式,獲取遠(yuǎn)程手機(jī)的相關(guān)信息,最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看,從而達(dá)到遠(yuǎn)程監(jiān)控的目的。
附圖說明
圖1是本發(fā)明中一個(gè)實(shí)施例的系統(tǒng)交互過程示意圖。
圖2是圖1中的進(jìn)一步優(yōu)選步驟交互示意圖。
圖3是本發(fā)明中一個(gè)實(shí)施例的實(shí)現(xiàn)方法流程示意圖。
圖4是圖3中的進(jìn)一步優(yōu)選流程示意圖。
具體實(shí)施方式
現(xiàn)在將參考一些示例實(shí)施例描述本公開的原理。可以理解,這些實(shí)施例僅出于說明并且?guī)椭绢I(lǐng)域的技術(shù)人員理解和實(shí)施例本公開的目的而描述,而非建議對(duì)本公開的范圍的任何限制。在此描述的本公開的內(nèi)容可以以下文描述的方式之外的各種方式實(shí)施。
如本文中所述,術(shù)語“包括”及其各種變體可以被理解為開放式術(shù)語,其意味著“包括但不限于”。術(shù)語“基于”可以被理解為“至少部分地基于”。術(shù)語“一個(gè)實(shí)施例”可以被理解為“至少一個(gè)實(shí)施例”。術(shù)語“另一實(shí)施例”可以被理解為“至少一個(gè)其它實(shí)施例”。
可以理解,在本申請(qǐng)中的基于安卓移動(dòng)終端,Android應(yīng)用通常由一個(gè)或多個(gè)基本組件組成,Android提供的四大組件分別是:Activity組件、Service組件、Broadcast Receiver組件以及Content Provider組件,其中Activity組件負(fù)責(zé)與用戶交互,相當(dāng)于應(yīng)用程序的一個(gè)用戶界面[30]。Service用于提供后臺(tái)服務(wù),Broadcast Receiver負(fù)責(zé)接收廣播消息,Content Provider為跨應(yīng)用的數(shù)據(jù)交換提供標(biāo)準(zhǔn)。任何Android軟件系統(tǒng)的構(gòu)建都離不開這4個(gè)組件。
Activity負(fù)責(zé)與用戶交互,在Android程序中,Activity代表手機(jī)的一個(gè)界面。如果把手機(jī)比喻成一個(gè)瀏覽器,Activity就相當(dāng)于一個(gè)網(wǎng)頁(yè)。有的程序只有一個(gè)Activity,有的可以包含多個(gè)Activity。數(shù)目取決于應(yīng)用程序的功能設(shè)計(jì)。一般情況下,總有一個(gè)Activity是用戶啟動(dòng)程序后首先看到的。有時(shí)有多個(gè)用戶界面需要啟動(dòng),則這些Activity就組成一個(gè)棧,當(dāng)前活躍的Activity在棧頂,由當(dāng)前界面跳轉(zhuǎn)到下一個(gè)界面。每個(gè)Activity都被分配一個(gè)窗口進(jìn)行繪制。窗口由一系列視圖組成,這些視圖全都繼承自View類。View組件是Android應(yīng)用中實(shí)實(shí)在在看到的部分,每個(gè)View組件均控制著界面中一塊特定的矩形區(qū)域,在這些矩形中繪制并響應(yīng)用戶的操作。View組件是用戶實(shí)實(shí)在在看到的部分,但View組件必須要放在容器中才能顯示出來,如果需要通過某個(gè)Activity把特定的View組件顯示出來,需要調(diào)用Activity.setContentView()函數(shù)。一般一個(gè)Android應(yīng)用是由多個(gè)Activity組成的。在多個(gè)Activity之間可以進(jìn)行相互跳轉(zhuǎn),例如,通過按下一個(gè)按鈕后,跳轉(zhuǎn)到其它的Activity,該跳轉(zhuǎn)可以設(shè)置返回值,這樣在很多時(shí)候是相當(dāng)方便的。
Service也是一個(gè)十分重要的Android組件,它與Activity的區(qū)別是:它沒有圖形界面,不與用戶交互,常常運(yùn)行在后臺(tái),比如在用戶使用其它Android應(yīng)用時(shí),在后臺(tái)采集GPS坐標(biāo)、播放音樂或者計(jì)算Activity組件需要的數(shù)據(jù)的服務(wù)時(shí),可以用到Service組件。與Activity一樣,Service組件需要繼承Service基類、Service組件運(yùn)行時(shí)有獨(dú)立的生命周期。
BroadcastReceiver是另一個(gè)重要的應(yīng)用組件,如它的字面意思,它是一個(gè)廣播消息的接收器。在Android系統(tǒng)中,有許多來自于系統(tǒng)內(nèi)部的廣播消息,比如:收到短信、電池電量過低等等,應(yīng)用程序可以擁有任意數(shù)量的廣播接收器來對(duì)廣播的信息作出響應(yīng)。從代碼的實(shí)現(xiàn)來看,BroadcastReceiver類似于事件監(jiān)聽器Listener。兩者之間不同的是:事件監(jiān)聽器監(jiān)聽的是程序內(nèi)的對(duì)象,而BroadcastReceiver監(jiān)聽的是Android程序中的其它組件。通過在BroadcastReceiver的子類中,改寫onReceive(Context context,Intent intent)函數(shù)來實(shí)現(xiàn)。通過在該函數(shù)中使用intent.getAction()獲取廣播中的意圖進(jìn)行判斷,如果是制定的意圖,則對(duì)廣播進(jìn)行響應(yīng)。
ContentProvider的作用是將特定的應(yīng)用程序數(shù)據(jù)提供給其它的應(yīng)用程序使用。在Android應(yīng)用中的各個(gè)組件相互獨(dú)立,各自運(yùn)行在自己的Dalvik虛擬機(jī)中,如果需要在不同應(yīng)用程序中進(jìn)行實(shí)時(shí)的數(shù)據(jù)交換,比如:一個(gè)應(yīng)用程序需要從聯(lián)系人管理應(yīng)用中讀取指定聯(lián)系人的數(shù)據(jù),就需要使用Android為跨應(yīng)用數(shù)據(jù)提供的標(biāo)準(zhǔn)——ContentProvider。通常在使用過程中需要繼承ContentProvider基類,其為別的應(yīng)用程序讀取和管理數(shù)據(jù)提供了一系列標(biāo)準(zhǔn)的方法。其它應(yīng)用程序使用ContentResolver對(duì)象來調(diào)用這些方法,即:一個(gè)應(yīng)用程序用ContentProvider來暴露自己存儲(chǔ)的數(shù)據(jù),另一個(gè)程序使用與之相對(duì)應(yīng)的ContentResolver來訪問這些數(shù)據(jù)。
可以理解,SQLite數(shù)據(jù)庫(kù)的存儲(chǔ)實(shí)現(xiàn)。它是Android系統(tǒng)數(shù)據(jù)庫(kù),通過研究數(shù)據(jù)庫(kù)文件和數(shù)據(jù)表的創(chuàng)建方法以及數(shù)據(jù)庫(kù)的操作函數(shù)來實(shí)現(xiàn)對(duì)數(shù)據(jù)的創(chuàng)建、讀取、增加、刪除和查詢。
在本申請(qǐng)中,還涉及U I界面的設(shè)計(jì):按照本申請(qǐng)的實(shí)現(xiàn)目標(biāo)和運(yùn)行流程,本申請(qǐng)共設(shè)計(jì)三個(gè)界面,分別是:主界面、注冊(cè)信息顯示界面和拍照界面。主界面負(fù)責(zé)接收用戶輸入的授權(quán)號(hào)碼、約定密碼、待刪除的授權(quán)電話號(hào)碼以及對(duì)注冊(cè)按鈕、查詢按鈕、刪除按鈕和監(jiān)聽按鈕的點(diǎn)擊動(dòng)作;注冊(cè)信息顯示界面主要負(fù)責(zé)顯示包含所有已經(jīng)注冊(cè)的授權(quán)號(hào)碼和監(jiān)聽密碼的列表;拍照界面負(fù)責(zé)顯示攝像頭的實(shí)時(shí)圖像。
主界面:授權(quán)號(hào)碼靜態(tài)文本,組件類型:TextView,用途:顯示“電話號(hào)碼”文字的靜態(tài)文本。
主界面:授權(quán)號(hào)碼編輯框,組件類型:EditText,用途:接收用戶輸入的電話號(hào)碼信息。
主界面:約定密碼靜態(tài)文本,組件類型:TextView,用途:顯示“密碼”文字的靜態(tài)文本。
主界面:約定密碼編輯框,組件類型:EditText,用途:接收用戶輸入的密碼。
主界面:注冊(cè)按鈕,組件類型:Button,用途:接收用戶對(duì)注冊(cè)按鈕的點(diǎn)擊事件。
主界面:查詢按鈕,組件類型:Button,用途:接收用戶對(duì)查詢按鈕的點(diǎn)擊事件。
主界面:刪除按鈕,組件類型:Button,用途:接收用戶對(duì)刪除按鈕的點(diǎn)擊事件。
主界面:監(jiān)聽按鈕,組件類型:Button,用途:接收用戶對(duì)監(jiān)聽按鈕的點(diǎn)擊事件。
1.主界面的實(shí)現(xiàn),界面的設(shè)計(jì)通過在Eclipse中Android項(xiàng)目的res/layout目錄下創(chuàng)建、編輯XML文件來實(shí)現(xiàn)。本文中的主界面通過新建Android項(xiàng)目,在該目錄下修改main.xml文件實(shí)現(xiàn)。方法是在EclipsePackage Explorer中雙擊該文件,在工作區(qū)中修改xml文件的代碼。主界面采用TableLayout表格布局形式,這種布局的特點(diǎn)是采用行、列的形式管理UI控件,通過添加TableRow來控制表格的行數(shù)。將表格布局中的android:orientation參數(shù)設(shè)為“vertical”即將布局中的TableRow容器和組件從上到下垂直排列。然后表格布局中添加表行容器和各組件,具體的步驟是:
(1)在表格布局中添加第一個(gè)表行容器,容器里包含授權(quán)號(hào)碼的靜態(tài)文本和編輯框。xml文件中包含多個(gè)節(jié)點(diǎn),每個(gè)xml節(jié)代表了實(shí)現(xiàn)不同功能的信息[42]。本文是在<TableLayout..>和</TableLayout>節(jié)點(diǎn)之間添加TableRow容器,然后在<TableRow>和</TableRow>之間添加靜態(tài)文本TextView組件,內(nèi)部參數(shù)設(shè)為android:text="電話號(hào)碼:",由于Android關(guān)閉了該組件的文字編輯功能,因此它顯示的內(nèi)容為“電話號(hào)碼:”的靜態(tài)文本;然后再添加一個(gè)EditText組件,參數(shù)設(shè)為android:d="@+id/num"。通過該參數(shù),為電話號(hào)碼文本編輯框組件分配了名為“num”的標(biāo)識(shí)符,Android會(huì)在R.java的id內(nèi)部類中給num賦予一個(gè)十六進(jìn)制的數(shù)據(jù),以后Java代碼中可以用findViewById(R.id.num)語句來獲取該組件的數(shù)據(jù)。TableRow容器使得每在其內(nèi)部添加一個(gè)組件,就在同一行增加一個(gè)列,因此在第一行增加的TextView、EditText兩個(gè)組件在同一行并列。
(2)以相同的方式在表格布局中再增加兩個(gè)TableRow容器,由于表格布設(shè)為垂直排列,新添加的表行容器位于在第二、三行。與步驟(1)采取相同的方法,在第二個(gè)表行容器中添加TextView、EditText兩個(gè)組件,其中TextView設(shè)定參數(shù)android:text="密碼:",EditText設(shè)定參數(shù)為android:id="@+id/psw"。第三行表格容器中也用相同的方法添加參數(shù)為android:text="刪除號(hào)碼:"的TextView組件和參數(shù)為android:id="@+id/key"的EditText組件。
(3)在表格布局中TableRow外添加Button組件,由于布局界面的排序方式為垂直方式,該組件在布局中單占一行,位于第三行。將其內(nèi)部參數(shù)設(shè)為android:id="@+id/insert",android:text="注冊(cè)",表格字符為“注冊(cè)”,賦予的標(biāo)識(shí)符為“insert”。
(4)再按照相同的方式在表格布局外添加查詢按鈕組件,參數(shù)設(shè)為android:id="@+id/search",android:text="查詢";添加刪除按鈕組件,參數(shù)為android:id="@+id/delete",android:text="刪除";添加監(jiān)聽按鈕組件,設(shè)置參數(shù)為android:id="@+id/listen",android:text="開始監(jiān)聽"。
這樣在界面上就設(shè)置了三組文本編輯框和四個(gè)按鈕,通過在主程序中采集數(shù)據(jù)和添加邏輯代碼即可實(shí)現(xiàn)數(shù)據(jù)的注冊(cè)、刪除查詢、監(jiān)聽功能。本文在主界面還增加了一個(gè)測(cè)試按鈕,參數(shù)為android:id="@+id/test",android:text="測(cè)試"在測(cè)試按鈕相關(guān)聯(lián)源文件對(duì)應(yīng)的函數(shù)中添加代碼可以實(shí)現(xiàn)自定義的測(cè)試功能。
2.注冊(cè)信息顯示界面的實(shí)現(xiàn),本申請(qǐng)的注冊(cè)信息顯示界面采用ListView列表組件來實(shí)現(xiàn),該組件在Android系統(tǒng)中的應(yīng)用非常廣泛,通過垂直的方式顯示所有的列表項(xiàng)。本文用它來顯示所有經(jīng)過注冊(cè)的授權(quán)號(hào)碼和約定密碼對(duì)。注冊(cè)信息顯示界面布局的創(chuàng)建通過在res/layout目錄下新建、編輯popup.xml來實(shí)現(xiàn)。該xml采用LinearLayout線性布局,android:orientation參數(shù)設(shè)為"vertical",即該布局所有的組件垂直向下依次排列。在<LinearLayout..></LinearLayout>之間添加<ListView../>組件,android:id參數(shù)設(shè)為"@+id/show",即給ListView組件分配名稱為show的標(biāo)識(shí)符,方便源文件的調(diào)用。
文件獲得了ListView組件后,需要給ListView設(shè)置其需要顯示的列表項(xiàng),本文中ListView組件的列表項(xiàng)是一個(gè)線性布局,即列表中每一行的內(nèi)容都是一系列垂直排列的組件。該線性布局通過在res/layout目錄中新建編輯line.xml文件實(shí)現(xiàn),在線性布局中依次填入android:text="監(jiān)聽人號(hào)碼"的TextView組件,android:id="@+id/num"的EditText組件,android:text="密碼"的TextView組件和android:id="@+id/psw"的EditText組件。通過源文件中的Adapter適配器將表項(xiàng)綁定到列表視圖,并通過程序賦予列表項(xiàng)中編輯框的內(nèi)容即可實(shí)現(xiàn)顯示界面的內(nèi)容。
3.拍照界面的顯示,拍照界面的設(shè)計(jì)通過向res/layout目錄下新建編輯cameramain.xml布局文件來實(shí)現(xiàn),具體的做法是:該布局采用幀布局,幀布局內(nèi)添加參數(shù)設(shè)置為android:id="@+id/Surface"的SurfaceView來實(shí)現(xiàn)。
以上三個(gè)界面構(gòu)成了系統(tǒng)與界面的人機(jī)交互接口,在實(shí)現(xiàn)上本文采用編輯對(duì)應(yīng)布局文件文檔的方式實(shí)現(xiàn)。Eclipse也為開發(fā)人員提供了所見即所得的圖形開發(fā)界面,通過把各組件像搭積木一樣拖入界面,簡(jiǎn)單設(shè)置組件的參數(shù)即可完成界面布局的實(shí)現(xiàn)。
可以理解,本申請(qǐng)中的系統(tǒng)的劃分方法主要是根據(jù)自頂向下的順序,直接接觸的的是用戶界面層,即UI層。該層主要的功能是實(shí)現(xiàn)人機(jī)交互。包含的功能有:響應(yīng)用戶的點(diǎn)擊和輸入動(dòng)作,顯示已經(jīng)注冊(cè)的授權(quán)號(hào)碼以及授權(quán)號(hào)碼對(duì)應(yīng)的查詢密碼,顯示系統(tǒng)的實(shí)時(shí)狀態(tài)等。在用戶界面層和Android系統(tǒng)以及底層數(shù)據(jù)庫(kù)之間的是功能實(shí)現(xiàn)層。該層主要實(shí)現(xiàn)監(jiān)聽匹配、判斷處理和信息反饋三個(gè)功能子模塊。其中,監(jiān)聽匹配模塊負(fù)責(zé)提取、分析收到的監(jiān)聽短信的號(hào)碼和內(nèi)容將其與數(shù)據(jù)庫(kù)授權(quán)列表中的注冊(cè)信息進(jìn)行匹配;判斷處理模塊負(fù)責(zé)根據(jù)監(jiān)聽匹配模塊的處理結(jié)果,如果匹配成功,則根據(jù)監(jiān)聽手機(jī)發(fā)送來的查詢代碼,分別調(diào)用GPS監(jiān)聽模塊、短信監(jiān)聽模塊、聯(lián)系人檢索模塊、來電監(jiān)聽模塊、后臺(tái)拍照模塊,提取這些模塊的結(jié)果數(shù)據(jù),傳遞給信息反饋模塊;信息反饋模塊通過調(diào)用彩信發(fā)送模塊將攝像頭拍攝的圖片信息回復(fù)給監(jiān)聽手機(jī),通過文字短信發(fā)送模塊,將其它數(shù)據(jù)信息回復(fù)給監(jiān)聽手機(jī)。
在功能實(shí)現(xiàn)層以下是數(shù)據(jù)庫(kù),它負(fù)責(zé)存儲(chǔ)、維護(hù)注冊(cè)用戶手機(jī)號(hào)碼和注冊(cè)用戶約定密碼信息列表,向UI層和功能實(shí)現(xiàn)層提供數(shù)據(jù)維護(hù)服務(wù)。
請(qǐng)參考圖1是本發(fā)明中一個(gè)實(shí)施例的系統(tǒng)交互過程示意圖,本實(shí)施例中的基于約定短信的微信遠(yuǎn)程移動(dòng)監(jiān)聽和回傳系統(tǒng),包括:監(jiān)控端和被監(jiān)控端,所述被監(jiān)控端被配置為,監(jiān)聽預(yù)置信息,并判斷所述預(yù)置信息是否有進(jìn)行過匹配;所述預(yù)置信息,作為存放于數(shù)據(jù)庫(kù)中的至少包括:監(jiān)聽號(hào)碼及預(yù)約短信內(nèi)容的一條記錄,若所述預(yù)置信息為未進(jìn)行過匹配,則獲得短信內(nèi)容和該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人,并在所述數(shù)據(jù)庫(kù)中進(jìn)行匹配;若所述預(yù)置信息為匹配過:監(jiān)聽號(hào)碼授權(quán)且預(yù)約短信內(nèi)容判斷為監(jiān)聽短信時(shí),則所述監(jiān)控端按照設(shè)定的類型代碼對(duì)應(yīng)執(zhí)行監(jiān)控指令,完成監(jiān)控。如所示圖2是圖1中的進(jìn)一步優(yōu)選步驟交互示意圖,作為本實(shí)施例中的優(yōu)選,還包括:在判斷所述預(yù)置信息是否有進(jìn)行過匹配前:根據(jù)上述該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人獲得發(fā)信號(hào)碼,將所述發(fā)信號(hào)碼與所述數(shù)據(jù)庫(kù)中預(yù)先注冊(cè)的授權(quán)列表中的號(hào)碼名單進(jìn)行比對(duì),若與授權(quán)列表中的電話號(hào)碼名單匹配,則發(fā)信人有權(quán)監(jiān)聽,監(jiān)聽狀態(tài)位參數(shù)為真;在存儲(chǔ)注冊(cè)用戶手機(jī)號(hào)碼表和/或注冊(cè)用戶監(jiān)聽密碼表的數(shù)據(jù)庫(kù)中檢查監(jiān)聽狀態(tài)位參數(shù)是否為真,若為真則將短信內(nèi)容與所述注冊(cè)用戶監(jiān)聽密碼表中的名單進(jìn)行匹配,匹配成功后接受監(jiān)聽信息,如果不匹配,則短信為普通短信。作為本實(shí)施例中的優(yōu)選,當(dāng)所述被監(jiān)控端接受監(jiān)聽短信之后,向監(jiān)控端發(fā)送提示短信:匹配成功,和/或,回復(fù)1獲取攝像頭拍照照片,和/或,回復(fù)2獲取GPS坐標(biāo),和/或,回復(fù)3獲取未接來電信息,和/或,回復(fù)4獲取未查短信信息,和/或,回復(fù)5獲取聯(lián)系人信息,和/或,回復(fù)6取消監(jiān)。作為本實(shí)施例中的優(yōu)選,所述被監(jiān)控端還被配置為建立數(shù)據(jù)存儲(chǔ)模塊,所述數(shù)據(jù)存儲(chǔ)模塊用以,基于SQLite數(shù)據(jù)庫(kù)建立監(jiān)聽人和約定短信內(nèi)容對(duì)應(yīng)的字段,并執(zhí)行SQL注冊(cè)、查詢、刪除語句,在所述SQLite數(shù)據(jù)庫(kù)中對(duì)采集的監(jiān)聽號(hào)碼和/或約定短信數(shù)據(jù)進(jìn)行增加、刪除或者查詢。
上述監(jiān)控端和被監(jiān)控端的交互過程如下:
STEP1:注冊(cè)界面作為入口界面,設(shè)置“監(jiān)聽者密碼”、“約定短信內(nèi)容”、“刪除號(hào)碼”等UI控件,負(fù)責(zé)采集相應(yīng)字符串內(nèi)容,增加“注冊(cè)”、“查詢”、“刪除”等按鈕,接收Click事件,實(shí)現(xiàn)監(jiān)聽號(hào)碼和約定短信內(nèi)容的增、刪、查。
STEP2:建立SQLite數(shù)據(jù)庫(kù),建立監(jiān)聽人和約定短信內(nèi)容對(duì)應(yīng)的字段。在點(diǎn)擊注冊(cè)界面上的“注冊(cè)”、“查詢”、“刪除”等按鈕后,執(zhí)行SQL語句,實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中對(duì)采集的監(jiān)聽號(hào)碼、約定短信數(shù)據(jù)的增加、刪除和查詢。
STEP3:當(dāng)點(diǎn)擊注冊(cè)界面的“監(jiān)聽”按鈕后后,對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的所有監(jiān)聽號(hào)碼——約定短信內(nèi)容記錄進(jìn)行遍歷提取,封裝在Buddle對(duì)象中,通過Intent對(duì)象傳遞給監(jiān)聽模塊。監(jiān)聽模塊是BroadcastReceiver組件的派生類,在該類內(nèi)用onReceive()函數(shù)監(jiān)聽。
STEP4:由另一臺(tái)手機(jī)向監(jiān)聽端手機(jī)發(fā)送一條短信,內(nèi)容為已經(jīng)在SQLite數(shù)據(jù)庫(kù)中注冊(cè)號(hào)好的約定短信。
STEP5:判斷短信的發(fā)信號(hào)碼和內(nèi)容是否與數(shù)據(jù)庫(kù)中的記錄匹配過。
STEP6:若沒有匹配過,則進(jìn)行提取、匹配。手機(jī)短信的一般構(gòu)成包含短信中心號(hào)碼、對(duì)方號(hào)碼和短信息內(nèi)容三部分。目前PDU(協(xié)議數(shù)據(jù)單元)模式已經(jīng)逐步成為主要用來發(fā)送和接收SMS信息的方式[38],因此從獲得短信的PDU中獲取發(fā)信人的手機(jī)號(hào)碼和所發(fā)信息的內(nèi)容,再分別與SQLite數(shù)據(jù)庫(kù)中表里的記錄逐條比對(duì),若發(fā)送號(hào)碼與內(nèi)容與其中的一條記錄中的內(nèi)容完全匹配,則將匹配參數(shù)置為TRUE。
STEP7:通過監(jiān)聽模塊向來信手機(jī)發(fā)送提示短信,內(nèi)容為“匹配成功,回復(fù)1獲取視頻監(jiān)控,2獲取GPS坐標(biāo),3獲取未接來電,4獲取未查短信,5獲取指定聯(lián)系人,6重置”。
STEP8:根據(jù)提示短信回復(fù)想要查詢內(nèi)容的類型代碼。
STEP9:若來信號(hào)碼已經(jīng)匹配過,則根據(jù)類型號(hào)碼調(diào)用指定模塊。由指定模塊提取相關(guān)數(shù)據(jù),向監(jiān)控手機(jī)發(fā)送相關(guān)數(shù)據(jù)。
STEP10:若代碼為1,開啟視頻監(jiān)控,調(diào)用拍照模塊,新建一個(gè)Camera類的對(duì)象用于拍照,調(diào)用一個(gè)延時(shí)函數(shù),延時(shí)一段時(shí)間(比如5秒)后,調(diào)用Camera類的拍照函數(shù)拍照。通過文件輸出流,形成jpg格式的照片,并把照片存放在指定路徑的內(nèi)置存儲(chǔ)卡上。
STEP11:調(diào)用彩信模塊,彩信模塊從存儲(chǔ)卡上讀取照片,向監(jiān)控手機(jī)發(fā)送彩信。
STEP12:最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。
STEP13:若代碼為6,則將匹配標(biāo)志參數(shù)置為FALSE,使來信重新匹配。
作為本實(shí)施例中的優(yōu)選,所述被監(jiān)控端還被配置為建立監(jiān)聽模塊,所述監(jiān)聽模塊包括:短信匹配單元、Gps坐標(biāo)讀取單元、來電監(jiān)聽單元、短信監(jiān)聽單元、讀取聯(lián)系人單元、短信息發(fā)送單元;所述短信匹配單元,用以獲取來信號(hào)碼和內(nèi)容,并將來信號(hào)碼和內(nèi)容進(jìn)行匹配,以及,判斷確定來信號(hào)碼與數(shù)據(jù)庫(kù)存儲(chǔ)的記錄匹配,獲取監(jiān)聽的權(quán)限;所述GPS坐標(biāo)讀取單元,用以每隔一定的間隔獲取一次被監(jiān)控端的位置坐標(biāo),并以將GPS坐標(biāo)以字符串作為短信內(nèi)容回復(fù)給監(jiān)聽手機(jī);所述來電監(jiān)聽單元,用以判斷來電標(biāo)志位是否為真,如果為非真,則沒有來電,如果為真,將來電狀態(tài)以字符串作為短信內(nèi)容回復(fù)給監(jiān)聽手機(jī);所述短信監(jiān)聽單元,用以獲取監(jiān)控端開啟監(jiān)控到被監(jiān)控端接收對(duì)應(yīng)執(zhí)行監(jiān)控指令階段,所述被監(jiān)控端收到所有的短信的內(nèi)容和收到短信的時(shí)間;所述讀取聯(lián)系人單元,用以調(diào)用安卓移動(dòng)終端ContentProvider組件的API接口,獲取得到對(duì)應(yīng)聯(lián)系人;所述短信息發(fā)送單元,用以通過sendTextMessage()函數(shù)發(fā)送文字短信,并向所述監(jiān)控端發(fā)送提示信息和回饋其它單元的查詢結(jié)果數(shù)據(jù)。
監(jiān)聽模塊
短信匹配單元中的短信的匹配
1.1獲取來信號(hào)碼和內(nèi)容
當(dāng)用戶在開始界面點(diǎn)擊“監(jiān)聽”按鈕,產(chǎn)生點(diǎn)擊事件,觸發(fā)“監(jiān)聽”按鈕對(duì)象上綁定的OnClickListener監(jiān)聽器,從而運(yùn)行SmsReceiver.java文件,進(jìn)入監(jiān)聽狀態(tài)。本文創(chuàng)建的SmsReceiver繼承自BroadcastReceiver。在Android中,Broadcast是一種廣泛運(yùn)用在應(yīng)用程序之間傳輸信息的機(jī)制。Android四大組件中的BroadcastReceiver是一種全局性的監(jiān)聽器,可以非常方便地實(shí)現(xiàn)不同組件之間的相互通信,它用于接收程序所發(fā)出的Broadcast Intent。Intent的中文意思是“意圖”,在Android系統(tǒng)中,一個(gè)組件通過Intent啟動(dòng)另一個(gè)組件,通俗的說,Intent就是告訴系統(tǒng)“某人將要怎樣做某事”。本系統(tǒng)中,SmsReceiver是BroadcastReceiver的子類,每次Broadcast事件發(fā)生后,就調(diào)用該類中的onReceive函數(shù)。SmsReceiver類的功能是對(duì)手機(jī)接收短信事件進(jìn)行監(jiān)聽,并對(duì)收到的短信進(jìn)行判斷,調(diào)用相應(yīng)模塊進(jìn)行處理。當(dāng)手機(jī)接收到短信時(shí)就會(huì)廣播內(nèi)容為"android.provider.Telephony.SMS_RECEIVED"的消息。
在SmsReceiver類的onReceive函數(shù)中加入if語句,使用getAction()獲取廣播事件的意圖動(dòng)作,如果動(dòng)作為"android.provider.Telephony.SMS_RECEIVED",說明手機(jī)收到一條短信。
PDU是用來發(fā)送和接收SMS的主要方式,通過在程序中使用createFromPdu()函數(shù),將收到的pdu(協(xié)議數(shù)據(jù)單元)轉(zhuǎn)化為SmsMessage對(duì)象。再通過getDisplayOriginatingAddress()函數(shù)將獲得的來信電話號(hào)碼存放在strsbPhone變量中,通過getDisplayMessageBody()函數(shù)將獲得的短消息的文本內(nèi)容存放在strsbPsw字符串變量中。
1.2.將來信號(hào)碼和內(nèi)容進(jìn)行匹配
取得來信號(hào)碼和內(nèi)容后進(jìn)行匹配,即將電話號(hào)碼和短信內(nèi)容與數(shù)據(jù)庫(kù)中存儲(chǔ)的授權(quán)號(hào)碼和密碼逐一比對(duì)。本文采取的方法是獲取數(shù)據(jù)庫(kù)數(shù)據(jù)表中所有記錄,將記錄中的授權(quán)號(hào)碼phone字段中的所有數(shù)據(jù)按照主鍵的順序存入一個(gè)名為strNum的字符串?dāng)?shù)組中,由于若匹配成功則將定義為boolean類型的匹配標(biāo)志變量bMatch置為“true”,用Toast在屏幕顯示“匹配成功”,向來信手機(jī)號(hào)碼發(fā)送一條提示短信。
1.3.判斷處理
當(dāng)通過監(jiān)聽判斷功能模塊確定來信號(hào)碼與數(shù)據(jù)庫(kù)存儲(chǔ)的記錄匹配,也即說明來信的號(hào)碼和發(fā)來的內(nèi)容已經(jīng)在系統(tǒng)中注冊(cè)過,該來信號(hào)碼是可以被信任的,有權(quán)限監(jiān)聽的。因此向該號(hào)碼發(fā)送一條文字短信,告知對(duì)方已經(jīng)匹配成功,詢問對(duì)方需要獲取哪些數(shù)據(jù),短信內(nèi)容為“匹配成功,回復(fù)1監(jiān)控,回復(fù)2獲取手機(jī)位置,回復(fù)3獲取未接電話,回復(fù)4獲取新來短信,回復(fù)5查詢指定號(hào)碼,回復(fù)6取消匹配?!睂?duì)方收到該提示短信后,會(huì)發(fā)來一條代碼短信來表達(dá)需要監(jiān)聽的類型。當(dāng)手機(jī)再次接收到短信,就會(huì)再次調(diào)用onReceive函數(shù),通過提取來信對(duì)方的電話號(hào)碼和短信內(nèi)容,如果來信號(hào)碼為剛才匹配的號(hào)碼,匹配標(biāo)志位為“true”則用switch語句依據(jù)短信內(nèi)容選擇相應(yīng)的功能模塊分支。
2.Gps坐標(biāo)讀取單元中的Gps坐標(biāo)讀取
當(dāng)監(jiān)聽手機(jī)發(fā)送的代碼短信內(nèi)容為字符“2”,則調(diào)用GPS監(jiān)聽模塊。該模塊的程序在入口類spy中完成,主要功能是在監(jiān)聽程序啟動(dòng)后,依據(jù)系統(tǒng)時(shí)鐘每隔一定的間隔即獲取一次Android手機(jī)的位置坐標(biāo)。Android四大組件中的Service是與Activity最相似的組件,它們都代表可執(zhí)行的程序,但Service沒有UI界面,在后臺(tái)運(yùn)行。Android提供了大量的系統(tǒng)服務(wù),開發(fā)者可以通過getSystemService()來獲取指定名稱的系統(tǒng)服務(wù)。一旦獲取了特定的服務(wù),便可利用其中的工具函數(shù)實(shí)現(xiàn)開發(fā)者的開發(fā)目的。
本申請(qǐng)就通過調(diào)用getSystemService(Context.LOCATION_SERVICE)函數(shù)獲取Android提供的定位服務(wù),獲得Android系統(tǒng)為支持GPS定位功能專門提供的LocationManager類,Android的定位服務(wù)都通過該類的對(duì)象產(chǎn)生,通過調(diào)用該類提供的各個(gè)函數(shù)即可獲取系統(tǒng)的GPS服務(wù)。常用的函數(shù)有:
boolean addGpsStatusListener(GpsStatus.Listener listener);添加GPS監(jiān)聽器。
GpsStatus getGpsStatus(GpsStatus status);取得GPS狀態(tài)。
Location getLastKnownLocation(String provider);根據(jù)GPS的提供者獲取最后一次已知的Location。
LocationProvider getProvider(String name);獲取指定的LocationProvider。
void requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener);根據(jù)指定的provider和最小距離分辨率,在指定的時(shí)間內(nèi)觸發(fā)指定的監(jiān)聽器。等等。
本申請(qǐng)?jiān)谑褂胓etSystemService()函數(shù)獲得LocationManager的對(duì)象后,通過其調(diào)用requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,8,newLocationListener()函數(shù),該函數(shù)是根據(jù)GPSprovider以3秒為周期,以8米為最小距離周期性地更新手機(jī)位置,并觸發(fā)LocationListener監(jiān)聽器。在函數(shù)體中,重寫onLocationChanged函數(shù),當(dāng)獲取的Location非空時(shí),更新Location對(duì)象,并建立一個(gè)StringBuilder,通過appen()函數(shù),逐次加入“實(shí)時(shí)的位置信息:\n”、“經(jīng)度:”字符串,然后通過用getLongitude()函數(shù),獲取Location對(duì)象中的經(jīng)度信息,并用appen()函數(shù)附加到StringBuilder之后,再使用相同的方法在StringBuilder添加“\n緯度:字符串、Latitude()函數(shù)獲得的緯度信息、“\n高度:”字符串、getAltitude()函數(shù)獲得的高度信息。這樣StringBuilder.toString()即為系統(tǒng)獲得的GPS信息的字符串。當(dāng)Location對(duì)象為空時(shí),則將GPS字符串置為“坐標(biāo)獲取中”。最后GPS模塊時(shí)將該字符串作為短信內(nèi)容回復(fù)給監(jiān)聽手機(jī),即完成了對(duì)手機(jī)位置的監(jiān)聽。
3.來電監(jiān)聽單元中的來電監(jiān)聽
當(dāng)采集的短信內(nèi)容為字符“3”,調(diào)用來電監(jiān)聽模塊。手機(jī)通話狀態(tài)的管理依靠Android提供的TelephonyManager服務(wù)類,與GPS監(jiān)聽模塊中獲取LocationManager服務(wù)類的方法相同,來電監(jiān)聽模塊也通過調(diào)用getSystemService
(Context.TELEPHONY_SERVICE)函數(shù)來獲取TelephonyManager。獲取到該管理器后,可以調(diào)用管理器類提供的大量getX()函數(shù)來獲取電話的相關(guān)信息。
本申請(qǐng)的來電監(jiān)聽模塊的程序在主程序spy.java中實(shí)現(xiàn)。首先創(chuàng)建一個(gè)PhoneStateListener,它是一個(gè)通話監(jiān)聽器,通過調(diào)用監(jiān)聽器內(nèi)部的onCallStateChanged(int state,String incomingNumber)函數(shù)來對(duì)被監(jiān)控端的Android手機(jī)不同來電狀態(tài)作出不同的響應(yīng)。其中參數(shù)state是一個(gè)整形變量,代表來電的狀態(tài)代碼。incomingNumber字符串則代表來電的電話號(hào)碼。重寫該函數(shù),在函數(shù)體中加入switch(state)分支函數(shù),根據(jù)來電狀態(tài)state的不同數(shù)值進(jìn)行不同處理。
當(dāng)state的值為TelephonyManager.CALL_STATE_IDLE時(shí),表明被監(jiān)控端的Android手機(jī)處于空閑狀態(tài),用break語句跳出分支。
當(dāng)state的值為TelephonyManager.CALL_STATE_OFFHOOK時(shí),手機(jī)處于摘機(jī)狀態(tài),用break語句跳出分支。
當(dāng)state的值為TelephonyManager.CALL_STATE_RINGING時(shí),表明手機(jī)處于來電狀態(tài),此狀態(tài)正是本系統(tǒng)模塊需要監(jiān)聽的狀態(tài),在該分支下調(diào)用sbIncoming.append(new Date()+"來電:"+incomingNumber)語句,將此時(shí)時(shí)間、來電號(hào)碼incomingNumber附加到儲(chǔ)存來電信息的StringBuilder靜態(tài)變量sbIncoming中,并將代表來電標(biāo)志位的boolean型變量bIncoming置為true。
本模塊函數(shù)和GPS監(jiān)聽模塊等狀態(tài)監(jiān)聽模塊一同位于主程序spy.java的onCreate創(chuàng)建函數(shù)中。監(jiān)聽系統(tǒng)開始運(yùn)行、調(diào)用主程序中的創(chuàng)建函數(shù)監(jiān)聽模塊即開始運(yùn)行,不斷獲取更新存儲(chǔ)在靜態(tài)變量中的系統(tǒng)狀態(tài),當(dāng)監(jiān)聽匹配模塊匹配成功,按照對(duì)方回復(fù)的監(jiān)聽代碼調(diào)取相應(yīng)的狀態(tài)監(jiān)聽模塊時(shí),該模塊即把存儲(chǔ)在靜態(tài)變量中的數(shù)值以短信的方式發(fā)送給對(duì)方。
在來電監(jiān)聽模塊被調(diào)用時(shí),判斷來電標(biāo)志位bIncoming是否為true,如果為false,表示沒有來電,則回復(fù)沒有來電內(nèi)容的短信,如果為true,則將包含sbIncoming.toString()字符串內(nèi)容的短信回復(fù)給對(duì)方,完成來電狀態(tài)的查詢。實(shí)現(xiàn)對(duì)手機(jī)來電記錄的監(jiān)聽。
4.短信監(jiān)聽單元中的短信監(jiān)聽
當(dāng)采集的短信內(nèi)容為字符“4”,調(diào)用未查短信監(jiān)聽模塊。本文中的短信監(jiān)聽的目的是:當(dāng)被監(jiān)控端的Android手機(jī)不在身邊時(shí),獲取從系統(tǒng)開啟到被監(jiān)控端的Android手機(jī)收到監(jiān)聽手機(jī)回復(fù)的短信監(jiān)聽代碼階段被監(jiān)控端的Android手機(jī)收到所有的短信的內(nèi)容和收到短信的時(shí)間,從而避免被監(jiān)控端的Android手機(jī)的機(jī)主遺漏重要信息。從目的來看,被監(jiān)控端的Android手機(jī)獲取的短信當(dāng)然不包括監(jiān)聽手機(jī)發(fā)來的匹配短信和代碼短信。其具體的實(shí)現(xiàn)方法是:在系統(tǒng)的短信監(jiān)聽文件SmsReceiver.java中添加相關(guān)代碼。在onReceive()函數(shù)外新建一個(gè)boolean型變量bMatch作為監(jiān)聽手機(jī)是否處于匹配狀態(tài)的標(biāo)志位,默認(rèn)值設(shè)為false。當(dāng)手機(jī)接到短信后,即進(jìn)入短信匹配階段。監(jiān)聽匹配模塊分離、提取短信的手機(jī)號(hào)碼和短信的內(nèi)容,將號(hào)碼和內(nèi)容與數(shù)據(jù)庫(kù)中的記錄進(jìn)行比對(duì),若來信號(hào)碼與數(shù)據(jù)庫(kù)中的記錄匹配,則將bMatch置為true。如果不匹配,也即說明該來信是監(jiān)聽匹配手機(jī)以外的號(hào)碼或者是監(jiān)聽號(hào)碼在非監(jiān)聽階段發(fā)來的短信,這時(shí)將分離出的短信內(nèi)容記錄下來,與new Date()獲取的時(shí)間一起存入字符串中,就形成了一次來信記錄,將未查短信記錄字符串用append函數(shù)不斷附加就形成了完整的來未查短信記錄,相關(guān)語句如下所示:
sbOtherMsg.append("短信來源:");
sbOtherMsg.append(strsbPhone);
sbOtherMsg.append("\n--------短信內(nèi)容--------\n");
sbOtherMsg.append(strsbPsw);
sbOtherMsg.append("\n--------------------------\n");
其中sbOtherMsg為一個(gè)StringBuilder變量,用來存放來信內(nèi)容;strsbPhone為短信監(jiān)聽程序當(dāng)bMatch為false,也就是非監(jiān)聽模式下分離出的來信號(hào)碼存放的StringBuilder變量;strsbPsw為非監(jiān)聽模式下分離出的來信內(nèi)容。最后短信監(jiān)聽模塊將sbOtherMsg以字符串的形式回復(fù)給監(jiān)聽手機(jī),實(shí)現(xiàn)對(duì)手機(jī)未查短信記錄的監(jiān)聽。
5.讀取聯(lián)系人單元中的讀取聯(lián)系人
當(dāng)采集的短信內(nèi)容為字符“5”,調(diào)用未查短信監(jiān)聽模塊。該模塊用到了Android四大組件的ContentProvider組件。它是不同應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換的標(biāo)準(zhǔn)API,是一個(gè)對(duì)外提供數(shù)據(jù)的接口。當(dāng)一個(gè)應(yīng)用程序需要把自己的數(shù)據(jù)暴露給其他程序使用時(shí)就可通過ContentProvider實(shí)現(xiàn),其他程序通過ContentResolver來操作其暴露的數(shù)據(jù)??梢园袰ontentProvider理解成一個(gè)網(wǎng)站,把ContentResolver理解成一個(gè)網(wǎng)絡(luò)客戶端。ContentResolver像客戶端通過網(wǎng)址訪問網(wǎng)站一樣通過Uri來訪問ContentProvider。Android系統(tǒng)提供了許多供開發(fā)人員訪問的ContentProvider。開發(fā)者在訪問時(shí)使用getContentResolver即可獲取ContentResolver對(duì)象,然后通過其提供的函數(shù)來操作數(shù)據(jù)。本文用到的函數(shù)是query(Uri uri,String[]projection,String selection,String[]selectionArgs,String sortOrder);該函數(shù)用來查詢指定Uri對(duì)應(yīng)的ContentProvider按照指定條件提供的數(shù)據(jù)。其中uri是查詢目標(biāo)數(shù)據(jù)的地址;projection用于標(biāo)識(shí)uri中有哪些列需要包含在返回的Cursor中;selection是用于查詢數(shù)據(jù)的過濾,相當(dāng)于SQLwhere語句的查詢條件;selectionArgs是查詢條件參數(shù),配合selection參數(shù)使用;sortOrder代表按照projection指定的列進(jìn)行排序的方式。
當(dāng)調(diào)用該模塊后,被監(jiān)控端的Android手機(jī)向監(jiān)聽號(hào)碼自動(dòng)回復(fù)一條提示短信,內(nèi)容為“請(qǐng)回復(fù)需要查詢聯(lián)系人的姓名”。對(duì)方回復(fù)需要查詢的聯(lián)系人后,短信監(jiān)聽模塊將來信分離,將短信內(nèi)容存放在字符串變量strsbPsw中。這時(shí)在聯(lián)系人監(jiān)聽模塊中建立一個(gè)Cursor對(duì)象cursorCont,它的值為函數(shù)getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,null,null,null,null)的返回值。其中ContactsContract.Contacts.CONTENT_URI是電話聯(lián)系人的Uri。通過以上函數(shù)就獲得了手機(jī)中的所有聯(lián)系人。然后通過while(cursorCont.moveToNext){}遍歷該Cursor對(duì)象。在while函數(shù)中新建存儲(chǔ)遍歷姓名的字符串變量strCont;然后將strCont與存放監(jiān)聽手機(jī)回復(fù)的查詢姓名的變量strsbPsw進(jìn)行比較,如果strCont.equals(strsbPsw)為真,說明strCont存儲(chǔ)的聯(lián)系人即為監(jiān)聽手機(jī)需要查詢號(hào)碼的聯(lián)系人。再通過該聯(lián)系人id獲取聯(lián)系人的電話,id在聯(lián)系人列表中是唯一的。在if函數(shù)中創(chuàng)建聯(lián)系人id字符串變量strId,;然后通過id獲取電話號(hào)碼列表,因?yàn)橥粋€(gè)聯(lián)系人可以存放多個(gè)號(hào)碼。新建Cursor對(duì)象cursorPhone,這樣就獲取了待查聯(lián)系人的電話號(hào)碼列表。再為存儲(chǔ)查詢號(hào)碼的StringBuilder變量,遍歷完成后將StringBuilder.toString()發(fā)送給監(jiān)聽手機(jī),實(shí)現(xiàn)聯(lián)系人檢索功能。
6.短信息發(fā)送單元中的短信息發(fā)送
本文實(shí)現(xiàn)的系統(tǒng)是基于Android的短信監(jiān)控系統(tǒng),短信作為監(jiān)聽的手段和監(jiān)聽命令、回饋手機(jī)狀態(tài)的載體,除傳遞圖像信息外,均采用文字短信的方式。用來發(fā)送短信息的管理器SmsManager與TelephonyManager和LocationManager一樣,也是Android系統(tǒng)提供的服務(wù),它提供了形如sendXXMessage()的函數(shù)來發(fā)送短信。本文使用該類提供的sendTextMessage()函數(shù)發(fā)送文字短信。通過該函數(shù)向監(jiān)聽手機(jī)發(fā)送提示信息和回饋各模塊的查詢結(jié)果數(shù)據(jù)。例如:通過以下語句向監(jiān)聽手機(jī)發(fā)送未接來電內(nèi)容信息。
SmsManagersManager;
sManager=SmsManager.getDefault();
sManager.sendTextMessage(strsbPhone,null,strIncoming,pi,null);}
首先以默認(rèn)的方式建立一個(gè)SmsManager類的對(duì)象sManager,然后通過其調(diào)用sendTextMessage()函數(shù)來發(fā)送文字短信。sendTextMessage()函數(shù)的原型為:
voidsendTextMessage(StringdestinationAddress,String scAddress,Stringtext,PendingIntent sentIntent,Pending Intent delivery Intent);其中各參數(shù)的含義是:
destinationAddress:目標(biāo)地址,即要發(fā)送的手機(jī)號(hào)碼;
scAddress:短信服務(wù)中心,本文中都為null,代表當(dāng)前默認(rèn)的短信服務(wù)中心;
text:發(fā)送短信的內(nèi)容;
sentIntent:當(dāng)消息發(fā)出時(shí),成功或者失敗的信息報(bào)告通過PendingIntent來廣播。如果該參數(shù)為空,則發(fā)信程序會(huì)被所有位置程序檢查一遍,這樣會(huì)導(dǎo)致發(fā)送時(shí)間延長(zhǎng)。
deliveryIntent:當(dāng)消息發(fā)送到收件人時(shí),該P(yáng)endingIntent會(huì)被廣播。
在一些實(shí)施例中,所述被監(jiān)控端還被配置為建立自動(dòng)拍照模塊,所述自動(dòng)拍照模塊用以開啟視頻監(jiān)控,新建一個(gè)Camera類的對(duì)象用于拍照的同時(shí)調(diào)用一個(gè)延時(shí)函數(shù):在設(shè)定的延時(shí)時(shí)間后,調(diào)用Camera類的拍照函數(shù)拍照,以及,通過文件輸出流,形成.jpg格式的照片,并把照片存放在指定路徑的內(nèi)置存儲(chǔ)卡上。所述自動(dòng)拍照模塊在當(dāng)采集的短信內(nèi)容為字符“1”,調(diào)用后臺(tái)拍照模塊。該功能主要自動(dòng)調(diào)用手機(jī)攝像頭進(jìn)行拍照,將拍攝的照片存儲(chǔ)在手機(jī)指定位置,再調(diào)用后臺(tái)彩信發(fā)送模塊發(fā)送給來信手機(jī),實(shí)現(xiàn)對(duì)手機(jī)周圍狀況的監(jiān)控。當(dāng)調(diào)用該模塊時(shí)用Intent方法啟動(dòng)負(fù)責(zé)后臺(tái)拍照的文件CameraActivity.java。具體代碼為:
Intent intent1=new Intent(context,CameraActivity.class);
context.startActivity(intent1);
拍照模塊的界面布局文件通過在Android的res/layout文件夾下建立cameramain.xml實(shí)現(xiàn)。在cameramain.xml上加入SurfaceView控件用于顯示攝像頭畫面。SurfaceView可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),是個(gè)非常重要的繪圖容器。本文用于拍照的文件為CameraActivity.java。在該類中使用setContentView(R.layout.cameramain);語句調(diào)用拍照頁(yè)面布局,通過(SurfaceView)this.findViewById(R.id.Surface)語句取得拍照頁(yè)面布局的SurfaceView組件對(duì)象,對(duì)其調(diào)用getHolder()函數(shù)完成SurfaceView組件的參數(shù)設(shè)定。
Android提供了Camera類來控制拍照。在該類中建立Camera類的對(duì)象camera,通過調(diào)用camera.takePicture()函數(shù)進(jìn)行拍照。在本系統(tǒng)中拍照界面是自動(dòng)彈出的,由于實(shí)際運(yùn)行中Android手機(jī)從主界面跳轉(zhuǎn)到拍照界面、拍照界面開啟攝像頭、自動(dòng)按下快門、存儲(chǔ)圖片都需要一定的時(shí)間,如果跳轉(zhuǎn)到拍照界面直接調(diào)用takePicture()函數(shù)拍照,拍照之后馬上跳轉(zhuǎn)到彩信發(fā)送模塊會(huì)導(dǎo)致拍照失敗。因此本文采取Handler消息傳遞機(jī)制,通過在多線程中調(diào)用延遲函數(shù)、發(fā)送消息來調(diào)用takePicture()拍照函數(shù)函數(shù)和彩信發(fā)送模塊,從而解決以上問題,采用的語句為:
以上代碼在新線程中加入了兩個(gè)sleep()延遲函數(shù),設(shè)定延遲5秒以后發(fā)送指定值為0x1233的消息啟動(dòng)拍照函數(shù),再延遲8秒后發(fā)送指定值為0x1234的消息啟動(dòng)名為MMSTest1Activity的彩信發(fā)送界面。
另外,Camera類的takePicture()函數(shù)包含3個(gè)參數(shù),其中第3個(gè)參數(shù)是一個(gè)PictureCallback對(duì)象,當(dāng)程序獲取了拍照所得的圖片數(shù)據(jù)后,PictureCallback對(duì)象將被回調(diào),當(dāng)拍攝事件發(fā)生,便會(huì)將圖片以byte[]的方式存檔。
在一些實(shí)施例中,所述被監(jiān)控端還被配置為建立后臺(tái)彩信發(fā)送模塊,所述彩信發(fā)送模塊按照如下方式建立:設(shè)置被監(jiān)控端接入點(diǎn)信息,判斷Wi-fi是否啟用,若啟動(dòng)則關(guān)閉Wi-fi網(wǎng)絡(luò),獲取當(dāng)前的APN,并向監(jiān)控端發(fā)送拍攝照片的彩信,實(shí)現(xiàn)對(duì)被監(jiān)控端的圖像監(jiān)控。后臺(tái)彩信發(fā)送模塊具體建立方法如下:
對(duì)短信監(jiān)控系統(tǒng)的運(yùn)行手機(jī)接入點(diǎn)的設(shè)定值為:
名稱:MMSC
Apn:Uniwap
MMSC:http://mmsc.myuni.com.cn
MMSproxy:10.0.0.172
port:80
ApnType:mms
由于被監(jiān)聽的手機(jī)完全處于無人值守狀態(tài),而Android根本就沒有提供后臺(tái)發(fā)送彩信的接口。作者查詢大量資料,發(fā)現(xiàn)一般教科書講述的發(fā)彩信的方法均是調(diào)用Android系統(tǒng)自帶的彩信界面,進(jìn)入彩信發(fā)送界面后需要人為輸入彩信相關(guān)信息和點(diǎn)擊發(fā)送按鈕,無法達(dá)到系統(tǒng)實(shí)時(shí)視頻監(jiān)控的要求。因此,本文采用Android提供的彩信工具包,包括com.google.android.mms、com.google.android.
mms.pdu、com.google.android.mms.uil,自行開發(fā)后臺(tái)彩信發(fā)送程序。建立一個(gè)名為MMSTestActivity.java的文件,負(fù)責(zé)彩信的后臺(tái)發(fā)送。
首先,通過getSystemService(Context.WIFI_SERVICE)函數(shù)獲得WifiManager對(duì)象。如果WifiManager的isWifiEnabled()返回值為真,表示W(wǎng)ifi啟用,由于發(fā)送彩信需經(jīng)過移動(dòng)蜂窩網(wǎng)絡(luò),因此調(diào)用WifiManager的setWifiEnabled()函數(shù)將其參數(shù)設(shè)為false,關(guān)閉Wifi網(wǎng)絡(luò)。然后通過調(diào)用getSystemService(Context.CONNECTIVITY_SERVICE)獲取ConnectivityManager對(duì)象。ConnectivityManager主要管理和網(wǎng)絡(luò)連接相關(guān)的操作。在通過調(diào)用該對(duì)象的getNetworkInfo(
ConnectivityManager.TYPE_MOBILE)函數(shù),獲取NetworkInfo對(duì)象,調(diào)用該對(duì)象的getExtraInfo()函數(shù)獲取當(dāng)前的APN。APN即“接入點(diǎn)名稱”,無論使用聯(lián)通3G還是移動(dòng)2G網(wǎng)絡(luò),都必須通過手機(jī)APN設(shè)置,是手機(jī)上網(wǎng)時(shí)必須配置的參數(shù)。中國(guó)聯(lián)通的2G業(yè)務(wù)WAP瀏覽器中使用的APN為“UNIWAP”,3G業(yè)務(wù)WAP瀏覽器使用的APN為“3GWAP”本文實(shí)驗(yàn)的被監(jiān)控端的Android手機(jī)使用聯(lián)通網(wǎng)絡(luò),因此之后獲得的當(dāng)前APN等于“uniwap”時(shí)才啟動(dòng)彩信發(fā)送函數(shù)。彩信發(fā)送函數(shù)中,構(gòu)造MMSInfo對(duì)象,設(shè)置其目的號(hào)碼為請(qǐng)求發(fā)送視頻監(jiān)控的短信號(hào)碼,文件路徑為存儲(chǔ)拍攝照片的路徑。通過sendMMS()函數(shù)向監(jiān)控手機(jī)發(fā)送拍攝照片的彩信,實(shí)現(xiàn)對(duì)被監(jiān)控端的Android手機(jī)的圖像監(jiān)控。
在一些實(shí)施例中,所述被監(jiān)控端還被配置為,通過第三方接口,將監(jiān)控的內(nèi)容轉(zhuǎn)發(fā)到指定的微信用戶??紤]到目前絕大多數(shù)C端用戶都安裝有騰訊的微信,同時(shí)短信和彩信也經(jīng)常會(huì)被手機(jī)衛(wèi)士等軟件所攔截和屏蔽,因此我們需要進(jìn)一步將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,以實(shí)現(xiàn)無障礙的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。為了實(shí)現(xiàn)這一點(diǎn),我們可通過調(diào)用微信內(nèi)嵌瀏覽器定義的一個(gè)私有JavaScript對(duì)象:WeixinJSBridge,通過操作這個(gè)對(duì)象的相關(guān)方法可以實(shí)現(xiàn)分享到微信好友,和判斷一個(gè)微信號(hào)的關(guān)注狀態(tài)以及實(shí)現(xiàn)關(guān)注指定微信號(hào)等功能。將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。
圖3是本發(fā)明中一個(gè)實(shí)施例的實(shí)現(xiàn)方法流程示意圖,步驟S300監(jiān)聽預(yù)置信息,并判斷所述預(yù)置信息是否有進(jìn)行過匹配;所述預(yù)置信息,作為存放于數(shù)據(jù)庫(kù)中的至少包括:監(jiān)聽號(hào)碼及預(yù)約短信內(nèi)容的一條記錄,步驟S301開始監(jiān)聽,若所述預(yù)置信息為未進(jìn)行過匹配,則獲得短信內(nèi)容和該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人,并在所述數(shù)據(jù)庫(kù)中進(jìn)行匹配;步驟S302若所述預(yù)置信息為匹配過:監(jiān)聽號(hào)碼授權(quán)且預(yù)約短信內(nèi)容判斷為監(jiān)聽短信時(shí),則按照設(shè)定的類型代碼對(duì)應(yīng)執(zhí)行監(jiān)控指令,完成監(jiān)控。在本實(shí)施例中的基于Android移動(dòng)終端的短信監(jiān)控系統(tǒng),該系統(tǒng)安裝運(yùn)行環(huán)境為Android2.0以上系統(tǒng),與外界交互的形式是手機(jī)文字短信和彩信。通過在被監(jiān)聽的Android移動(dòng)終端上安裝該系統(tǒng),在系統(tǒng)內(nèi)注冊(cè)具有監(jiān)聽權(quán)限的電話號(hào)碼和約定的監(jiān)聽密碼,當(dāng)有權(quán)限的監(jiān)控端(手機(jī))發(fā)送約定好的監(jiān)聽密碼時(shí),系統(tǒng)進(jìn)行認(rèn)證匹配,若匹配成功則回復(fù)提示信息,詢問對(duì)方要查詢哪些內(nèi)容并賦予對(duì)方查詢代碼,被監(jiān)控端的Android手機(jī)接到對(duì)方再次發(fā)來的查詢代碼后完成拍照、采集手機(jī)位置、未接來電、未查短信、聯(lián)系人等內(nèi)容,通過回復(fù)彩信、短信的方式,實(shí)現(xiàn)對(duì)被監(jiān)控端的Android手機(jī)的遠(yuǎn)程監(jiān)控。最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。通過以上步驟實(shí)現(xiàn)的技術(shù)效果至少包括,經(jīng)過系統(tǒng)授權(quán)的遠(yuǎn)程終端(手機(jī))以發(fā)送和接收短信的方式,對(duì)裝有本監(jiān)控系統(tǒng)的Android手機(jī)的攝像頭、位置坐標(biāo)、未接來電、未查短信等進(jìn)行有安全審核的監(jiān)控,從而實(shí)現(xiàn)對(duì)被監(jiān)控端的Android手機(jī)狀態(tài)信息的遠(yuǎn)程監(jiān)聽與控制。最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。
圖4是圖3中的進(jìn)一步優(yōu)選流程示意圖,還包括進(jìn)一步安全認(rèn)證步驟:步驟S400根據(jù)上述該條短信內(nèi)容對(duì)應(yīng)的發(fā)信人獲得發(fā)信號(hào)碼,步驟S401將所述發(fā)信號(hào)碼與所述數(shù)據(jù)庫(kù)中預(yù)先注冊(cè)的授權(quán)列表中的號(hào)碼名單進(jìn)行比對(duì),步驟S402授權(quán)列表中的電話號(hào)碼名單是否匹配?步驟S403若與授權(quán)列表中的電話號(hào)碼名單匹配,則發(fā)信人有權(quán)監(jiān)聽,監(jiān)聽狀態(tài)位參數(shù)為真;步驟S404在存儲(chǔ)注冊(cè)用戶手機(jī)號(hào)碼表和/或注冊(cè)用戶監(jiān)聽密碼表的數(shù)據(jù)庫(kù)中檢查監(jiān)聽狀態(tài)位參數(shù)是否為真,步驟S405若為真則將短信內(nèi)容與所述注冊(cè)用戶監(jiān)聽密碼表中的名單進(jìn)行匹配,匹配成功后接受監(jiān)聽信息,步驟S406如果不匹配,則短信為普通短信。當(dāng)被監(jiān)控端的Android手機(jī)不在身邊時(shí),用戶使用監(jiān)控端比如,監(jiān)聽手機(jī)向被監(jiān)控端的Android手機(jī)發(fā)送短信,被監(jiān)控端的Android手機(jī)自動(dòng)回復(fù)短信,從而實(shí)現(xiàn)監(jiān)聽手機(jī)與被監(jiān)控端的Android手機(jī)的信息互動(dòng)。監(jiān)聽端手機(jī)通過被監(jiān)控端的Android手機(jī)發(fā)來的文字短信獲得被監(jiān)控端的Android手機(jī)的狀態(tài)數(shù)據(jù),或者通過彩信獲得被監(jiān)控端的Android手機(jī)攝像頭拍攝的照片。最后將所有信息轉(zhuǎn)發(fā)到指定的微信用戶,實(shí)現(xiàn)方便快捷的跨系統(tǒng)遠(yuǎn)程移動(dòng)監(jiān)聽、回傳和即時(shí)查看。根據(jù)以上流程,監(jiān)聽手機(jī)只要能夠發(fā)送文字短信、接收文字短信和彩信即可,并不要求監(jiān)聽手機(jī)也是Android手機(jī)。由于被監(jiān)控端的Android手機(jī)回復(fù)的彩信、短信涉及攝像頭拍攝的照片、GPS坐標(biāo)、未接來電、未查短信、聯(lián)系人等重要信息,且這些信息是通過向監(jiān)聽手機(jī)電話號(hào)碼以短信的方式發(fā)送,為保證信息發(fā)送的安全和不影響監(jiān)聽手機(jī)在非監(jiān)聽階段和非監(jiān)聽手機(jī)與被監(jiān)控端的Android手機(jī)正常的短信通信,必須對(duì)短信監(jiān)聽的過程進(jìn)行安全認(rèn)證。本申請(qǐng)主要從設(shè)定授權(quán)手機(jī)號(hào)碼和設(shè)置監(jiān)聽密碼。當(dāng)系統(tǒng)接受監(jiān)聽短信之后,自動(dòng)向監(jiān)聽手機(jī)發(fā)送提示短信,內(nèi)容可設(shè)為:“匹配成功!回復(fù)1獲取攝像頭拍照照片,回復(fù)2獲取GPS坐標(biāo),回復(fù)3獲取未接來電信息,回復(fù)4獲取未查短信信息,回復(fù)5獲取聯(lián)系人信息,回復(fù)6取消監(jiān)控?!北O(jiān)聽手機(jī)按照提示信息的內(nèi)容,回復(fù)查詢代碼信息。被監(jiān)控端的Android手機(jī)按照發(fā)送來的查詢代碼提取相關(guān)模塊的數(shù)據(jù),以彩信或短信的方式自動(dòng)回復(fù)給監(jiān)聽手機(jī)。監(jiān)聽手機(jī)監(jiān)聽完畢,注銷監(jiān)聽權(quán)限,向被監(jiān)控端的Android手機(jī)發(fā)送取消監(jiān)聽狀態(tài)的代碼短信。被監(jiān)控端的Android手機(jī)將監(jiān)聽狀態(tài)位置為FALSE,并修改匹配成功的標(biāo)志位,注銷監(jiān)聽手機(jī)的監(jiān)聽權(quán)限。
雖然本公開以具體結(jié)構(gòu)特征和/或方法動(dòng)作來描述,但是可以理解在所附權(quán)利要求書中限定的本公開并不必然限于上述具體特征或動(dòng)作。而是,上述具體特征和動(dòng)作僅公開為實(shí)施權(quán)利要求的示例形式。