Jack_King007的专栏

安卓四大组件的复习——窃听电话(四)

这一节我是用来复习service~~~~~~~~~~~~~~~·

安卓为什么会有服务,有什么用?

答案: 起先安卓是靠着linux 定制的系统,后来自己封装了一些东西,就变成了安卓。linux 没有服务但是有进程。安卓就借着这个概念,研究出来了 service

service:没有界面的acitivty 没什么这么说呢 ,因为它有生命周期,是不是很变态。

 其实对于service 的应用,最常用的就是MP3的播放。 基本概念我就不多了。

先用一个Demo来解释

思路,用户打开应用就开启服务监控电话 ,还需要建立一个类,来开启服务和一些监控手机电话的一些操作

package com.itheima.callstatuslintener;

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

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//开启服务
		Intent intent = new Intent(this,PhoneStatusService.class);
		startService(intent);
		
	}



}
到了 service类  按照规则 先去配置文件注册

  <service android:name=".PhoneStatusService"></service>

service  不像广播  配置名字就是service   后面是要注册的类名

开始编写service 类吧

我在前面说过 一个service 是有生命周期的,基本和activity差不多

Oncreate  Ondestory  OnstartComment()  ....但是基本能用的就是Oncreate  和Ondestory

在service 中创建的时候 ,开始监听电话 


package com.itheima.callstatuslintener;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class PhoneStatusService extends Service {
	/**
	 * 长期在后台运行的组件,如果用户不手动的关闭 , 不会停止的.
	 */
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		System.out.println("服务被创建了 ");
		// 监视用户电话状态的变化...
		// 电话管理器 电话管理的服务
		TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		// 监听手机的通话状态的变化
		tm.listen(new MyPhoneStatusLinstener(),
				PhoneStateListener.LISTEN_CALL_STATE);

	}

	private class MyPhoneStatusLinstener extends PhoneStateListener {
		private MediaRecorder recorder;

		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			try {
				switch (state) {
				case TelephonyManager.CALL_STATE_IDLE: // 空闲状态 ,没有通话 没有响铃
					if (recorder != null) {
						recorder.stop();
						recorder.reset(); // You can reuse the object by going back
						recorder.release(); // Now the object cannot be reused
						recorder = null;
					}

					break;
				case TelephonyManager.CALL_STATE_RINGING: // 响铃状态.
					System.out.println("发现来电号码 :" + incomingNumber);
					// 1.创建出来一个录音机
					recorder = new MediaRecorder();
					// 设置录制的音频源 从话筒里面获取声音
					recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					recorder.setOutputFile("/sdcard/" + System.currentTimeMillis()
							+ ".3gp");
					recorder.prepare();

					break;
				case TelephonyManager.CALL_STATE_OFFHOOK: // 通话状态
					if (recorder != null) {
						recorder.start(); // Recording is now started
					}
					break;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}

			super.onCallStateChanged(state, incomingNumber);
		}

	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		System.out.println("服务被销毁了...");
	}

}

基本上上面一段代码就是监听手机和开始录音,  都是模板代码  照抄就可以了