1. 程式人生 > >Android四大元件應用系列——實現電話攔截和電話錄音

Android四大元件應用系列——實現電話攔截和電話錄音

public class ListenPhoneService  extends  Service {
    private  AudioManager mAudioManager;
    private TelephonyManager tm;
    public ListenPhoneService() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
        tm
=(TelephonyManager)getSystemService(Service.TELEPHONY_SERVICE); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){//去電廣播,android沒有來電話廣播 }else{//去掉撥打電話就是來電狀態了 //方法1 //獲得來電電話 // String number=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
//獲得電話狀態 // String state=intent.getStringExtra(TelephonyManager.EXTRA_STATE); // Log.d("jereh", "incoming phone:" + number); // Log.d("jereh","call state:"+state); // TelephonyManager.EXTRA_STATE_IDLE: 沒有來電 或者 結束通話 // TelephonyManagerEXTRA_STATE_OFFHOOK: 接起電話 // TelephonyManager.EXTRA_STATE_RINGING:當電話呼入時,響鈴時
// if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){ // if(number.equals("13280998858")){//攔截指定的電話號碼 // mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); // Log.d("jereh","電話被攔截"); // stopCall(); // mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢復鈴聲 // } // }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){ //接起電話 // recordCall();//開始錄音 // }else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){ // stopCall();//停止錄音 // } //方法2 // 設定一個監聽器,監聽電話狀態 tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE); } return super.onStartCommand(intent, flags, startId); } /** * 結束通話電話 */ private void stopCall(){ try { //Android的設計將ServiceManager隱藏了,所以只能使用反射機制獲得。 Method method=Class.forName("android.os.ServiceManager").getMethod("getService", String.class); IBinder binder=(IBinder)method.invoke(null, new Object[]{"phone"});//獲得系統電話服務 ITelephony telephoney=ITelephony.Stub.asInterface(binder); telephoney.endCall();//結束通話電話 stopSelf();//停止服務 } catch (Exception e) { e.printStackTrace(); } } PhoneStateListener listener=new PhoneStateListener(){ @Override public void onCallStateChanged(int state,String incomingNumber){ switch (state){ //手機空閒了 case TelephonyManager.CALL_STATE_IDLE: stopCall();//停止錄音 break; //接起電話 case TelephonyManager.CALL_STATE_OFFHOOK: recordCall();//開始錄音 break; // 響鈴時 case TelephonyManager.CALL_STATE_RINGING: Log.e("jereh", "來電號碼是:"+ incomingNumber); // 如果該號碼屬於黑名單 if (incomingNumber.equals("123456")) { // 如果是黑名單,就進行遮蔽 stopCall(); } break; } } }; /** * 停止錄音 */ private void stopRecord(){ if(recording){ recorder.stop(); recorder.release(); recording=false; stopSelf();//停止服務 } } /** * 電話錄音 */ private MediaRecorder recorder; private boolean recording ; private void recordCall(){ Log.d("jereh", "record calling") if( Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ recorder=new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//讀麥克風的聲音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設定輸出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 編碼方式 File file=new File(Environment.getDownloadCacheDirectory().getAbsolutePath(),"recorder"); if(!file.exists()){ file.mkdir(); } recorder.setOutputFile(file.getAbsolutePath() + "/" + System.currentTimeMillis() + "3gp");// 存放的位置是放在sd卡recorder目錄下 try { recorder.prepare(); recorder.start(); recording=true; } catch (IOException e) { e.printStackTrace(); } } } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } }

相關推薦

Android四大元件應用系列——實現電話攔截電話錄音

public class ListenPhoneService extends Service { private AudioManager mAudioManager; private TelephonyManager tm; public ListenPhoneSe

Android四大元件應用系列——Activity與Service互動實現APK下載

private Thread downloadThread; private void startDownload(){ downloadThread=new Thread(new Runnable() { @Override public void run

Android四大元件應用系列——使用BroadcastReceiverService實現倒計時

public class ClockActivity extends Activity { private TextView tvClock; public static final String CLOCK_ACTION="com.jereh.Clock_Action";

Android四大元件應用系列5——使用AIDL實現跨程序呼叫Service

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

Android四大元件應用系列——使用ContentProvider實現跨程序通訊

package com.jereh; public class PersonProvider extends ContentProvider { private DbOpenHelper openHelper; private static final UriMatcher

Android四大元件——ContentProvider的增刪改查優化

前言ContentProvider步驟:創資料庫,寫規則匹配,配置manifests,另一個應用使用其實ContentProvider就是:在一個匹配器中寫入自己寫好的匹配規則,並對外提供寫好的匹配規則供使用,剩下的就是增刪改查的處理細節處理:在增刪改查中的查詢中,是沒有cu

android四大元件--使用LocalBroadcast進行應用內資料傳遞

1.區別:本地廣播的傳送和接受,只能在一個程序中。因此在跨程序中的通訊是不能使用的。比如建立了新的程序或者是在不同app之間通訊都是不能使用。 但是在不同的執行緒中是能夠進行傳送和接受資料。因此保證了廣播的安全問題。 2.使用是通過LocalBroadcastManager獲取到獲取例項進行

Android--四大元件之BroadCastReceiver(生命週期、實現原理及使用等)

####1. BroadCastReceiver是什麼? ####2. 廣播型別 ######1). 有序廣播 ######2). 無序廣播 ####3. 生命週期 ####4. 實現原理 ####5. 使用方法 ####6. 許可權問題(安全性) ####7. LocalBroad

Android四大元件之BroadcastReceiver應用詳解

今天我們來講一下Android中BroadcastReceiver的相關知識。 BroadcastReceiver也就是“廣播接收者”的意思,顧名思義,它就是用來接收來自系統和應用中的廣播。 在Android系統中,廣播體現在方方面面,例如當開機完成後系統會產生一條廣播,接收到這條廣播就能實

android 四大元件service 音樂播放器的實現

新建立一個Android工程《音樂播放器》,包名:com.itheima.musicPlayer。 在res目錄下新建一個資料夾raw(名字必須為raw,約定大於配置的原則),然後在raw目錄中拷貝進一個音樂檔案,注意檔名必須遵循Android資原始檔的命名

android四大元件android應用程式的組成)是什麼,功能分別是?

四大元件分別為activity、service、content provider、broadcast receiver。一、android四大元件詳解1、activity(1)一個Activity通常就是一個單獨的螢幕(視窗)。(2)Activity之間通過Intent進行通

Android四大元件之使用ContentProvider實現資料共享

ContendProvider是不同應用程式之間進行資料交換的標準API,ContentProvider以某種Uri的形式對外提供資料,允許其他應用訪問或修改資料;其他應用程式使用ContentReslover根據Uri去訪問操作指定資料 因為ContendP

Android四大元件——BroadcastReceiver(原理篇)

前言 Android四大元件——BroadcastReceiver(基礎篇)裡面介紹了BroadcastReceiver相關的基礎知識,本文將從Android 8.0原始碼來分析一下廣播的註冊和接收原理。 BroadcastReceiver的註冊 Android系統中Broa

《瞭解Android四大元件 》的補充

Activity View元件是所有UI控制元件、容器控制元件的基類,View元件就是Android應用中使用者實實在在看到的部分。但View元件需要放到容器元件中,或者使用Activity將它顯示出來。如果需要通過某個Activity把指定的View顯示出來,呼叫Activit

瞭解Android四大元件

Activity 用途:Activity是一個應用程式元件,其所有操作都與使用者密切相關,它提供一個螢幕,在此進行使用者互動從而完成某項任務。(是使用者操作的視覺化介面;它為使用者提供了一個完成操作指令的視窗)在一個android應用中,一個Activity通常就是一個單獨的螢幕,它上面

Android 四大元件android:exported 屬性詳解

當我們在用360等檢測軟體掃描應用漏洞時,掃描結果可能歸類為安全漏洞,涉及一個Android:exported屬性,這個屬性究竟是用來幹嘛的呢,詳情見下圖: 因此,查了官方API,學習了一下這個屬性! android:exported 是Android中的四大元件 Ac

Android 四大元件之Service的啟動、繫結小述

一、概述 學習過Android的小夥伴就不可能不知道Service是什麼,因為Service是Android四大元件之一,聲名赫赫有木有,所以在這裡我就不詳細介紹了,本節主要還是充當筆記的作用,因為我待記性如初戀,記性虐我千百遍。 二、Service的建立 Service是一

Android 四大元件之——Service(一)

一、什麼是服務        服務,是Android四大元件之一, 屬於 計算型元件。   長期後臺執行的沒有介面的元件 ,特點是無使用者介面、在後臺執行、生命週期長 二,什麼時候使用服務?  

Android 四大元件之——Acitivity(四) Activity是如何載入顯示內容的?

1. 在Activity呼叫onCreate()等生命週期之前,Activity會呼叫attach()方法,而在attach()方法中會呼叫如下程式碼 onAttach() { PolicyManager.makeNewWindow(this) }而makeNewWindow實際

Android 四大元件之——Acitivity(三) 深入瞭解Activity的啟動流程

上圖為整個Activity的啟動流程 接下來我們大概分析  在我們的Android系統中,應用程式是由Launcher這個應用啟動起來的。當我們安裝好應用程式之後,就會在Launcher的介面上生成一個圖示,我們點選圖示時Launch就會啟動我們的應用程式。 1.點選