简单的电话监听
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
* 开始监听
*/
public void startMonitor(View view){
Intent service=new Intent(this,MyMonitorService.class);
startService(service);
}
/*
* 停止监听
*/
public void stopMonitor(View view){
Intent service=new Intent(this,MyMonitorService.class);
stopService(service);
}
}
**********************************************************************
public class MyMonitorService extends Service {
protected static final String TAG = "m520it";
protected String mIncomingNumber="";
private boolean isComming=false;
/*
* 分析
* 手机监听是长期的,不能随着app的关闭service就停止,这里就用不到绑定service
*/
@Override
public void onCreate() {
//1获取系统服务中(电话服务)的电话管理
TelephonyManager mService = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
//给电话设置监听
mService.listen(new PhoneStateListener(){
private MediaRecorder recorder;
@Override//来电状态的改变会执行这里
public void onCallStateChanged(int state, String incomingNumber) {
/**电话设备状态改变的时候回调这个方法
* Callback invoked when device call state changes.
* @see TelephonyManager#CALL_STATE_IDLE
* @see TelephonyManager#CALL_STATE_RINGING
* @see TelephonyManager#CALL_STATE_OFFHOOK
*/
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
if (isComming&&mIncomingNumber!=null) {
Log.v(TAG, "CALL_STATE_IDLE------->保存录音");//开启服务的时候执行一次,每挂断一次电话执行一次
recorder.stop();
recorder.release();
recorder=null;
isComming=false;
mIncomingNumber="";
}
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.v(TAG, "CALL_STATE_RINGING------>保存来电的号码");//铃声响起的时候执行,只有此时才可以获取来电的电话号码
mIncomingNumber=incomingNumber;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
isComming=true;
Log.v(TAG, "CALL_STATE_OFFHOOK---->开始录音");//接通的时候执行执行
recorder = new MediaRecorder();
//设置声音来源,麦克风
recorder.setAudioSource(AudioSource.MIC);
//设置输出格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//设置输出文件的路径,
recorder.setOutputFile(getPath(mIncomingNumber));
//准备输出
try {
recorder.prepare();
recorder.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
//监听来电时的状态
}, PhoneStateListener.LISTEN_CALL_STATE);
}
protected String getPath(String mIncomingNumber2) {
// TODO Auto-generated method stub
//新建一个文件,作为文件保存的路径,根据来电的号码和当前的时间作为文件名
SimpleDateFormat dateFormat=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
File file = new File(getFilesDir(), dateFormat.format(new Date())+":"+mIncomingNumber2+".3gp");
return file.getAbsolutePath();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
权限
*****************************************
<!--读取电话状态-->
<!--录制音频-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>