接通电话状态
用到的函数:
TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//获得电话管理器manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//对呼叫状态进行监听PRivate PhoneStateListener listener = new PhoneStateListener(){@Overridepublic void onCallStateChanged(int state, String incomingNumber) {//当状态改变时调用super.onCallStateChanged(state, incomingNumber);switch(state){case TelephonyManager.CALL_STATE_RINGING://来电//处理代码break;case TelephonyManager.CALL_STATE_IDLE://挂断电话//处理代码break;case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态//处理代码break;}}};
录音的核心代码
recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置输入流设备为麦克风recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置编码方式recorder.setOutputFile(filename); //设置输出文件recorder.prepare();//准备recorder.start();//开始录制recorder.stop();//停止录制recorder.release(); //释放资源
权限配置
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>清单文件配置<service android:name="com.ldw.record.recorderService"></service>activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动录音服务" android:onClick="click" /></RelativeLayout>MainActivity.javapackage com.ldw.record;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent = new Intent(this, recorderService.class); startService(intent); } }recorderService.javapackage com.ldw.record;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 recorderService extends Service { private MediaRecorder recorder; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } //服务创建的额时候被调用 @Override public void onCreate(){ super.onCreate(); //获得电话管理器 TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); //对呼叫状态进行监听,第二个参数决定监听的内容 tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); } class MyListener extends PhoneStateListener{ //一旦电话的状态改变次方法调用 @Override public void onCallStateChanged(int state, String incomingNumber) { //当状态改变时调用 super.onCallStateChanged(state, 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.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置编码方式 recorder.setOutputFile("sdcard/luyin.3gp"); //设置输出文件 try { recorder.prepare(); } catch (Exception e) { e.printStackTrace(); } recorder.start(); break; case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话状态 //开始录音 System.out.println("接通电话状态"); break; } } }}
新闻热点
疑难解答