【发布时间】:2017-08-18 20:56:55
【问题描述】:
我是 Android 编程新手。我正在尝试构建通话记录器。我能够检测到来电并成功启动媒体记录器并录制语音。但是在 Call Disconnect 时,Stop() 方法不会触发。当我关闭应用程序时它会停止。除了 stop() 之外,一切都在工作。当我关闭应用程序时,录音也会保存。 通话断开后如何Stop()录音?
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.telephony.TelephonyManager;
import java.io.IOException;
import java.util.Calendar;
public class nCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MediaRecorder callrecorder = new MediaRecorder();
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Calendar c = Calendar.getInstance();
int tm = c.get(Calendar.DATE);
int tx = c.get(Calendar.SECOND);
String timex = tm+"-"+tx;
callrecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
callrecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + incomingNumber +"-"+ timex+"-"+tx+".mp4");
try {
callrecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
callrecorder.start();
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
callrecorder.stop();
callrecorder.release();
}
}
}
}
**
编辑 2
** 我如何停止()媒体记录器? 我尝试实例化
MediaRecorder r;
在全球范围内,
r.stop()
不起作用,因为 r 没有被实例化。
如果可以保存此 MediaRecorder Instance 的状态,并在稍后与 stop 方法一起使用,我该怎么做?
public class nCallRecorder extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
//start recording
String CallNo = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
MediaRecorder r = new MediaRecorder();
r.setAudioSource(MediaRecorder.AudioSource.MIC);
r.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
r.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
r.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+CallNo+".mp4");
try { r.prepare(); } catch(IOException e) { e.printStackTrace(); }
r.start();
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)) {
//stop recording
Toast.makeText(context,"Call Ends",Toast.LENGTH_LONG).show();
}
}
}
【问题讨论】:
-
仅仅声明一个
MediaRecorder是不够的。您仍然必须在某处为其分配一个MediaRecorder实例(即r = new MediaRecorder();)。您可以在开始录制时执行此操作,就在r.setAudioSource之前。
标签: android audio-recording android-mediarecorder phone-call