功能:监听来电:当在通话状态时开启录音器
录取通话声音需要权限:<uses-permission android:name="android.permission.RECORD_AUDIO"/>
执行音频捕获的步骤:Audio Capture(从文档中直接翻译过来的)
1.android.media.MediaRecorder的创建一个新的实例。
2.使用MediaRecorder.setAudioSource设置音频源()。你可能会想useMediaRecorder.AudioSource.MIC。(设置音频源为麦克风)
3.设置输出文件格式使用MediaRecorder.setOutputFormat()。
4.设置输出文件名称使用MediaRecorder.setOutputFile()。
5.设置音频编码器使用MediaRecorder.setAudioEncoder()。
6.MediaRecorder实例上调用MediaRecorder.prepare()。
7.开始音频捕捉,叫MediaRecorder.start()。
8.停止音频捕捉,叫MediaRecorder.stop()。
9.当你完成了MediaRecorder实例,调用MediaRecorder.release()。
CallingMediaRecorder.release()总是建议立即免费资源。
服务类:
public class PhoneListenService extends Service { private TelephonyManager tm;//电话管理者 private MyListener listener;//监听器 private MediaRecorder mr;//录音机 @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); //得到电话管理器 tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE); listener = new MyListener();//设置监听器 tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//监听电话的状态 System.out.println("开启了服务"); } class MyListener extends PhoneStateListener{ @Override//当电话的呼叫状态发生改变时回调的方法 public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); //start:为0代表空闲,1代表来电,2代表在通话 System.out.println("电话状态发生变化:"+state+" 打进来的号码:"+incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE://=0 if(mr!=null){ //第八步:停止录音 mr.stop(); //第九步:释放资源 mr.release(); } break; case TelephonyManager.CALL_STATE_RINGING://=1 System.out.println("来电话了"); break; case TelephonyManager.CALL_STATE_OFFHOOK://=2 try { mr = new MediaRecorder(); //第二步:设置音频源 如果是麦克风 音频源为:.MIC mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //第三步:设置录制的文件格式 mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //第四步:设置输出文件名称使用MediaRecorder.setOutputFile()。 File file=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp"); mr.setOutputFile(file.getAbsolutePath()); //第五步:设置音频编码器使用MediaRecorder.setAudioEncoder()。 mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //第六步:准备录制 mr.prepare(); //第七步:开始音频捕捉 mr.start(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: break; } } } @Override public void onDestroy() { super.onDestroy(); tm.listen(listener, PhoneStateListener.LISTEN_NONE);//取消监听 listener=null; System.out.println("关闭了服务"); } }
MainActivity:
//监听电话的状态需要读取电话状态的权限 //<uses-permission android:name="android.permission.READ_PHONE_STATE" /> public class MainActivity extends Activity implements OnClickListener { private Button start; private Button stop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); start.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent=new Intent(this, PhoneListenService.class); switch (v.getId()) { case R.id.start://开启服务 startService(intent); break; case R.id.stop://关闭服务 stopService(intent); break; default: break; } } }