80,469
社区成员




MediaRecorder mMediaRecorder;
File mRecorderFile;
long startRecorderTime,stopRecorderTime;
Handler mHander;
public boolean doStart() {
try {
//创建MediaRecorder
mMediaRecorder = new MediaRecorder();
//创建录音文件
mRecorderFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/recorderdemo/" + System.currentTimeMillis() + ".mp4");
if (!mRecorderFile.getParentFile().exists()) mRecorderFile.getParentFile().mkdirs();
mRecorderFile.createNewFile();
//配置MediaRecorder
//从麦克风采集
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//保存文件为MP4格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//所有android系统都支持的适中采样的频率
mMediaRecorder.setAudioSamplingRate(44100);
//通用的AAC编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//设置音质频率
mMediaRecorder.setAudioEncodingBitRate(96000);
//设置文件录音的位置
mMediaRecorder.setOutputFile(mRecorderFile.getAbsolutePath());
//开始录音
mMediaRecorder.prepare();
mMediaRecorder.start();
startRecorderTime = System.currentTimeMillis();
} catch (Exception e) {
//Toast.makeText(MediaRecordActivity.this, "录音失败,请重试", Toast.LENGTH_SHORT).show();
return false;
}
//记录开始录音时间,用于统计时长,小于3秒中,录音不发送
return true;
}
/**
* 关闭录音
*
* @return
*/
public boolean doStop() {
try {
mMediaRecorder.stop();
stopRecorderTime = System.currentTimeMillis();
final int second = (int) (stopRecorderTime - startRecorderTime) / 1000;
//按住时间小于3秒钟,算作录取失败,不进行发送
if (second < 3) return false;
mHander.post(new Runnable() {
@Override
public void run() {
//tv_sendmsg.setText("录制成功:" + second + "秒");
}
});
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
2022年,大佬们解决了吗
大佬最后解决了吗?
楼主后面有没有解决此问题
public class MyAccessibilityService extends AccessibilityService {
MediaRecorderHelper mediaHelper ;
AudioRecordManager recorderUtils2;
ExtAudioRecorder recorderUtils;
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
String packageName = event.getPackageName().toString();
if (!packageName.equals("com.why.myrecord")) {
return;
}
CharSequence className = event.getClassName();
if (className.equals("com.why.myrecord.MainActivity")) {
TelephonyManager tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new Mylistener(), PhoneStateListener.LISTEN_CALL_STATE);//这是电话状态的监听器实例
}
}
@Override
public void onInterrupt() {
}
class Mylistener extends PhoneStateListener
{
@Override
public void onCallStateChanged(int state, String incomingNumber) {//state 电话的状态,incomingNumber是来电的电话号码
// TODO Auto-generated method stub
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://空闲状态
System.out.println("it is free!");
//AddLog("it is free!");
if(mediaHelper!=null)
{
mediaHelper.doStop();
}
if(recorderUtils !=null)
{
recorderUtils.stopRecording();
}
break;
case TelephonyManager.CALL_STATE_RINGING:// 铃响状态
System.out.println("it is ringing!");
AddLog("it is ringing!");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("it is speaking!");// 通话中的状态
if(mediaHelper==null)
{
mediaHelper = new MediaRecorderHelper();
mediaHelper.doStart();
}
break;
default:
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
}