电话的状态:
挂断电话
来电状态
接通电话状态
用到的函数:
TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//获得电话管理器
manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//对呼叫状态进行监听
private PhoneStateListener listener = new PhoneStateListener(){
@Override
public 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.java
package 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.java
package 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;
}
}
}
}
本文介绍了一种在Android平台上实现电话状态监听及来电自动录音的方法。通过使用TelephonyManager和MediaRecorder等API,可以有效地监测电话的挂断、来电和接听状态,并自动启动录音功能。此外,还提供了必要的权限配置和核心代码示例。
2302

被折叠的 条评论
为什么被折叠?



