当前位置: 首页 > 知识库问答 >
问题:

通话挂断时,媒体记录器不会停止并保存录音通话

瞿子濯
2023-03-14

我是Android编程新手。我试图建立一个电话录音机。我能够检测到来电,成功启动媒体记录器并录制语音。但是在呼叫断开时,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();
            }


        }
    }
}

**

**如何停止()媒体录像机?我尝试实例化

MediaRecorder r;

在全球范围内,但是,

r、 停止()

不起作用,因为r没有实例化。

如果可以保存此MediaRecorder实例的状态,并在以后将其与停止方法一起使用,我该怎么做?

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();
        }
    }
}

共有1个答案

艾仲渊
2023-03-14

检查状态是否已更改为 IDLE 似乎位于 if 意图.get 字符串扩展(TelephonyManager.EXTRA_STATE)等于(TelephonyManager.EXTRA_STATE_RINGING)) {.你可能想要这样的东西:

if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
    // start recording
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE) {
    // stop recording
}

此外,每次调用BroadcastRecverter时,您都在创建一个新的MediaRecorder实例。您应该只在开始录制时创建一个MediaRecorder实例,并保存该实例,以便以后可以停止它。

另一个小问题是,您有intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelePhoonyManager.EXTRA_SSTATE_OFFHOOK)在您的条件下决定是否停止录制。“摘机”并不意味着你挂断了电话;这意味着“至少存在一个正在拨号、活动或挂起的呼叫”。

 类似资料:
  • 问题内容: 我想通知任何传入和传出语音呼叫的代码。我需要掌握以下所有内容: 如果是来电或去电 拨打的号码或来电显示的电话号码 通话时长,或者如果错过了通话 如果电话号码与电话的联系人列表中的某人匹配,如果我可以获得更多的联系信息,特别是联系人姓名,那也将是一件很圆滑的事。 通话结束后,我需要我的代码来获取这些信息。也许我只是没有在寻找正确的术语,但是我很难找到如何实现此目标的任何示例。 如果有人可

  • 我正在做一个项目来记录在android中的VOIP通话,我没有找到任何解决方案,有很多应用程序支持手机上的VOIP录音。我找不到任何教程和帮助。Cube Call Recorder是提供此功能的应用程序之一,但我不知道如何做到这一点。我通过使用android MediaRecorder开始录音进行了测试,然后启动了WhatsApp通话,所以其他人无法收听我的声音。通话后,我检查了只有我的声音保存在

  • 我在Android的通话记录应用程序中工作,以记录双方的语音,它在Android版本6之前工作良好,但在Android 7中不工作。Android 7的问题是远程语音未记录或可能听不到。 我用的是MediaRecorder。我尝试了所有的音频来源,但没有运气。如果有人知道如何在Android 7中实现这一点,请分享它或一些关于这方面的建议将非常有帮助。

  • 我创建了语音通话录音应用程序,它与手机的麦克风和听筒配合得很好。但是当插入耳机时,它不能录制音频。我试图将AudioSource更改为AudioSource.default,以为它会自动接受默认音频源。它什么也没记录。

  • 我得到一个错误,我不明白,不能找到任何帮助完整的信息: 请求的资源上不存在Access-Control-Allow-Origin标头。因此不允许访问Origin的https:*******' 。响应具有HTTP状态代码401。

  • 关于通话记录     可确认通话记录。显示的图标可能因拨打或接听状态而异。 选择通话记录时显示的图标 已接来电 显示已接听的电话。 未接来电 显示未接听的电话。 已拨电话 显示电话的拨打记录。 语音消息 显示已接收的语音消息。 新的语音消息 仅于新接收语音消息时显示。 登录要求 仅于接收联系人名单的登录要求时显示。 提示 未确认的记录,会在(通话记录)的 (未处理事项)显示。 使用PSP-2000