安卓利用服务 监听电话 学习笔记

监听服务程序

package com.telphone.com;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.sip.SipAudioCall.Listener;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class MonitorPhone extends Service {

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

	@Override
	public void onCreate() {
		System.out.println("启动监听电话服务");
		TelephonyManager pm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		pm.listen(new myListener(), PhoneStateListener.LISTEN_CALL_STATE);
		super.onCreate();
	}
	
	private class myListener extends PhoneStateListener
	{
		private MediaRecorder record;
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			try {
				switch (state) {
				case TelephonyManager.CALL_STATE_IDLE: //电话闲置状态
					if (record != null) {
						record.stop();
						record.reset();
						record.release();
						record = null;
					}
					break;
				case TelephonyManager.CALL_STATE_RINGING://振铃状态
					record = new MediaRecorder();
					record.setAudioSource(MediaRecorder.AudioSource.MIC);//麦克风
					record.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					record.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					record.setOutputFile("/sdcard/"+System.currentTimeMillis()+".3gp");
					record.prepare();
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK: //通话状态
					record.start();
					break;
				default:
					break;
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			super.onCallStateChanged(state, incomingNumber);
		}
	}
	
	@Override
	public void onDestroy() {
		System.out.println("销毁监听电话服务");
		super.onDestroy();
	}

}

在main 中开启服务

package com.telphone.com;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends Activity {

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Intent intent = new Intent(this, MonitorPhone.class);
		startService(intent);
	}
}

清单文件中配置服务以及增加监听电话需要的权限

权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
服务在application节点下
 <service android:name=".MonitorPhone"></service>

转载于:https://my.oschina.net/u/729139/blog/472263

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值