• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Android的電話竊聽器的實(shí)現(xiàn)

      2018-09-10 10:47:32劉慧梅
      現(xiàn)代信息科技 2018年2期

      劉慧梅

      摘 要:Android是一種基于Linux的開放源代碼的操作系統(tǒng),主要應(yīng)用于移動(dòng)設(shè)備中,如智能手機(jī)和平板電腦,它由Google公司和開放手機(jī)聯(lián)盟開發(fā)及領(lǐng)導(dǎo)。本文介紹了Android應(yīng)用開發(fā)的主要技術(shù),并且通過Android Studio環(huán)境下開發(fā)一個(gè)電話竊聽器案例來詳細(xì)探討Service服務(wù)的特點(diǎn)及其在Android應(yīng)用程序中的使用。

      關(guān)鍵詞:Android開發(fā);竊聽器;服務(wù)Service

      中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2018)02-0083-02

      The Implementation of Android-based Phone Eavesdropper

      LIU Huimei

      (Shaanxi Institute of Technology,Xi'an 710300,China)

      Abstract:Android is an open source operation system based on Linux. It is mainly used in mobile devices,such as smart phones and tablet computers. It is led and developed by Google and open cell alliance. This paper introduces the main technology of Android application development,and develops a case of phone wiretap in Android Studio environment,and discusses the characteristics of Service service and its application in Andorid application.

      Keywords:Android development;eavesdropper;service

      1 Android應(yīng)用開發(fā)前景

      移動(dòng)互聯(lián)網(wǎng)的發(fā)展和成熟,為手機(jī)APP應(yīng)用軟件的開發(fā)與推廣提供了廣闊的發(fā)展空間。手機(jī)應(yīng)用也從個(gè)人應(yīng)用開發(fā)逐漸拓展到商務(wù)領(lǐng)域,多數(shù)企業(yè)在軟件公司定制軟件時(shí),要求同時(shí)開發(fā)對應(yīng)的App應(yīng)用軟件,并且在經(jīng)營使用過程中,將APP作為其推廣企業(yè)品牌和提供銷售內(nèi)容的重要渠道。手機(jī)APP應(yīng)用的開發(fā)與使用已經(jīng)成為各行各業(yè)的需求,也逐漸占據(jù)了移動(dòng)互聯(lián)網(wǎng)市場的重要位置。

      2 Android應(yīng)用開發(fā)關(guān)鍵技術(shù)

      Android應(yīng)用是基于組件開發(fā)的,一共有四種常用組件。組件一是Activity,為用戶提供可視化界面,實(shí)現(xiàn)用戶與系統(tǒng)的交互功能。每個(gè)Activity對應(yīng)一個(gè)用戶界面,界面上可以添加多個(gè)控件,如文本框、單/復(fù)選按鈕,每個(gè)控件可以設(shè)置監(jiān)聽器,進(jìn)行事件處理,來響應(yīng)用戶對控件的操作。組件二是服務(wù)Service,它是長期運(yùn)行在后臺(tái)的用戶組件,沒有用戶界面。它適合執(zhí)行一些不需要顯示界面,但需要執(zhí)行一段時(shí)間的后臺(tái)操作,比如下載數(shù)據(jù),播放音樂等。組件三是內(nèi)容提供者Content Provider,它的功能是實(shí)現(xiàn)不同程序之間的數(shù)據(jù)共享,它不僅允許一個(gè)程序訪問另一個(gè)程序中的數(shù)據(jù),還可以選擇只對哪部分?jǐn)?shù)據(jù)進(jìn)行共享,從而保證程序中的隱私數(shù)據(jù)。組件四是廣播接收者Broadcast Receiver,廣播是應(yīng)用程序之間進(jìn)行消息傳遞的機(jī)制,例如當(dāng)收到一條短信時(shí)會(huì)發(fā)送一條提示廣播。應(yīng)用程序想要接收廣播中的消息就要使用廣播接收者。

      3 Service和Thread的關(guān)系

      一個(gè)進(jìn)程在執(zhí)行過程中可以開啟多個(gè)線程,這些線程是可以相互獨(dú)立、并發(fā)執(zhí)行的。通常會(huì)將一些耗時(shí)操作放在線程上執(zhí)行,這樣就不會(huì)阻塞主線程的運(yùn)行。如果在一個(gè)Activity中創(chuàng)建子線程,別的Activity是無法操作的,而且當(dāng)Activity被銷毀后,就不可以重新得到之前創(chuàng)建的子線程了。這樣,當(dāng)應(yīng)用程序被關(guān)閉后會(huì)成為空進(jìn)程,很容易被系統(tǒng)回收。多個(gè)Activity可以控制同一個(gè)Service,系統(tǒng)只會(huì)創(chuàng)建一個(gè)Service的實(shí)例,多個(gè)Activity都可以操作服務(wù)中的方法。當(dāng)Activity被銷毀或者程序被關(guān)閉時(shí),只要進(jìn)程還在,Service可以繼續(xù)在后臺(tái)運(yùn)行,而且服務(wù)進(jìn)程不容易被回收,即使由于內(nèi)存不足被回收了,只要內(nèi)存充足后系統(tǒng)還會(huì)復(fù)活被關(guān)閉的服務(wù)進(jìn)程。

      4 電話竊聽器的實(shí)現(xiàn)

      服務(wù)是在后臺(tái)長期運(yùn)行且沒有界面的組件,需要用戶調(diào)用stopService()或手動(dòng)關(guān)閉。本案例在Android Studio2.3.1平臺(tái)下開發(fā),主要功能是開啟一個(gè)服務(wù),即長期在后臺(tái)監(jiān)控電話,當(dāng)電話處于通話狀態(tài)時(shí),即啟動(dòng)錄音機(jī)進(jìn)行錄音,以實(shí)現(xiàn)監(jiān)控電話功能。

      4.1 新建項(xiàng)目

      在AndroidStudio環(huán)境中新建項(xiàng)目,名為PhoneListener。

      4.2 創(chuàng)建、開啟和關(guān)閉服務(wù)

      在項(xiàng)目中新建服務(wù)類PhoneService,其父類為Service。Android中四大組件的使用均需要在清單文件中進(jìn)行配置,所以PhoneService需要在清單文件中進(jìn)行配置,在標(biāo)簽中添加。在該類中添加兩個(gè)生命周期函數(shù):onCreate()、onDestroy()??稍趦蓚€(gè)方法中分別添加日志輸出以便執(zhí)行觀察服務(wù)。

      定義好服務(wù)后,需要開啟服務(wù)。在MainActivity.java的onCreate()中新建Intent意圖對象,指定開啟的服務(wù)名稱。Intent it=new Intent(this,PhoneService.class);startService(it);這時(shí)可以運(yùn)行程序觀察服務(wù)的執(zhí)行。程序運(yùn)行后出現(xiàn)主界面,在模擬器上按后退鍵退出程序,這時(shí)把Activity關(guān)閉掉,但服務(wù)還在執(zhí)行。打開Logcat視圖查看日志信息,輸出“服務(wù)被創(chuàng)建了”信息,但并沒有服務(wù)被銷毀的輸出,說明服務(wù)還在執(zhí)行。

      服務(wù)的結(jié)束需要手動(dòng)操作,打開模擬器設(shè)置->應(yīng)用->正在運(yùn)行->PhoneListener,點(diǎn)擊“停止”關(guān)閉服務(wù)。查看日志,輸出“服務(wù)被銷毀了”信息。

      4.3 在服務(wù)中監(jiān)視用戶電話狀態(tài)的變化

      要監(jiān)聽電話狀態(tài),首先要獲取管理通話信息的電話管理器,它也是系統(tǒng)中的一個(gè)服務(wù)。在PhoneService類的onCreate()方法中添加語句:TelephonyManager telMan=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);telMan即為獲得的電話管理器,該對象調(diào)用listen()方法,去注冊監(jiān)聽器對象telMan.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);第一個(gè)參數(shù)代表監(jiān)聽器,是類PhoneStateListener的對象,參數(shù)2代表監(jiān)聽手機(jī)的何種狀態(tài),此處設(shè)置監(jiān)聽手機(jī)打電話狀態(tài)。

      定義內(nèi)部類MyPhoneListener繼承PhoneStateListener,重寫里面的onCallStateChanged()方法。該方法是回調(diào)函數(shù),當(dāng)手機(jī)電話狀態(tài)發(fā)生變化時(shí),就會(huì)執(zhí)行這個(gè)回調(diào)函數(shù)。

      4.4 電話竊聽

      當(dāng)手機(jī)鈴響時(shí),準(zhǔn)備錄音機(jī);當(dāng)手機(jī)處理通話狀態(tài)時(shí)開啟錄音機(jī),錄制話筒中所說信息;當(dāng)手機(jī)電話處于空閑狀態(tài)時(shí),結(jié)束錄音,把剛才錄的音頻文件保存到手機(jī)SD卡。

      private class MyPhoneListener extends Phone StateListener{

      public void onCallStateChanged(int state,String inPhoneNum){

      //兩個(gè)參數(shù)分別表示電話狀態(tài)和來電的電話號(hào)碼

      super.onCallStateChanged(state,inPhoneNum);

      try {

      switch(state){

      case TelephonyManager.CALL_STATE_IDLE:

      if(rc!=null) { //手機(jī)空閑時(shí)將錄音機(jī)關(guān)閉

      rc.stop();

      rc.release();

      rc=null;

      }

      break;

      case TelephonyManager.CALL_STATE_RINGING:

      System.out.println(“電話號(hào)碼--------”+inPhoneNum);

      rc=new MediaRecorder();//手機(jī)來電時(shí)新建錄音機(jī)

      rc.setAudioSource(MediaRecorder.AudioSource.MIC);

      //設(shè)置錄音的輸入源從話筒里獲取,表示僅錄制接電話者的聲音,如需雙向錄音可打開揚(yáng)聲器

      rc.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設(shè)置音頻格式為3gp

      rc.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//指定編碼方式

      rc.setOutputFile("/sdcard/"+System.currentTimeMillis()+".3gp");//指定錄制的聲音寫到哪里,此處設(shè)置寫到電話SD卡上

      rc.prepare();

      break;

      case TelephonyManager.CALL_STATE_OFFHOOK:

      if(rc!=null) rc.start();//手機(jī)接聽時(shí)開啟錄音機(jī)

      break;

      }

      } catch (Exception e){e.printStackTrace(); }

      }

      }

      4.5 權(quán)限添加

      應(yīng)用中一些操作涉及隱私及手機(jī)存儲(chǔ)設(shè)備的訪問,需要添加如下權(quán)限:(1)監(jiān)控手機(jī)狀態(tài)需要添加權(quán)限:“android.permission.READ_PHONE_STATE”。(2)錄制聲音是侵犯隱私的,需要添加權(quán)限:“android.permission.RECORD_AUDIO”。(3)寫外部存儲(chǔ)設(shè)備權(quán)限:“android.permission.WRITE_EXTERNAL_STORAGE”。

      5 結(jié) 論

      電話竊聽器最終實(shí)現(xiàn)的功能是將錄制的音頻文件上傳到服務(wù)器。這需要不斷地監(jiān)控電話狀態(tài),只要有通話,就需錄音,通話結(jié)束,連接服務(wù)器上傳音頻文件。因此案例選用服務(wù)實(shí)現(xiàn)手機(jī)監(jiān)控與錄音功能。由于服務(wù)運(yùn)行在主線程上,為防止主線程的運(yùn)行阻塞,可以在Service中再創(chuàng)建一個(gè)子線程,然后在子線程中實(shí)現(xiàn)電話監(jiān)控功能。

      參考文獻(xiàn):

      [1] 黑馬程序員.Android移動(dòng)開發(fā)基礎(chǔ)案例教程 [M].人民郵電出版社,2017.

      [2] 胡忠望,莫家慶.基于Android的移動(dòng)應(yīng)用開發(fā)研究 [J].軟件導(dǎo)刊,2014,13(11):18-20.

      [3] 韓文智,駱文亮.Android平臺(tái)的移動(dòng)APP開發(fā)方法與應(yīng)用研究 [J].四川理工學(xué)院學(xué)報(bào)(自然科學(xué)版),2015,28(3):22-26.

      [4] 趙靜.Android系統(tǒng)架構(gòu)及應(yīng)用程序開發(fā)研究 [J].自動(dòng)化與儀器儀表,2017(1):86-87+90.

      中超| 安达市| 塔河县| 长垣县| 龙山县| 荆门市| 无为县| 巴里| 饶阳县| 元朗区| 白水县| 桂阳县| 龙山县| 中牟县| 珲春市| 博湖县| 柘城县| 保德县| 海南省| 如东县| 盈江县| 惠安县| 镇巴县| 泗洪县| 文山县| 耿马| 南京市| 赤壁市| 湾仔区| 金坛市| 临潭县| 锡林浩特市| 岳普湖县| 大同县| 吉安市| 河源市| 贡觉县| 宜宾市| 义马市| 通山县| 金昌市|