首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaRecorder异常停止时

MediaRecorder异常停止时
EN

Stack Overflow用户
提问于 2018-03-15 09:51:54
回答 1查看 531关注 0票数 0

我正在创建一个应用程序,记录来电,无论是来来去去。当调用ends.But I得到非法状态异常时,记录应该停止,.Th异常位于mediarecorder.stop()“停止调用无效状态4".I不知道means.This是什么第一次使用MediaRecorder。我已经检查过类似的questions..but,他们的答案没有帮助,me.Your帮助将是appreciated.Thanks in advance..This问题Error on MediaRecorder Stop : stop called in invalid state 4没有帮助我,因为问题中的问题是用户在调用stop()方法之前调用准备()。这和我的情况不一样。

代码:

代码语言:javascript
复制
import android.Manifest;
import android.content.Context;
import android.media.MediaRecorder;
import android.support.v4.app.ActivityCompat;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

public class TeleListener extends PhoneStateListener {
    private Context context;
    boolean isRinging=false;
    String filepath;
    String internalfilename="AUD";


    public TeleListener(Context context,String filepath) {
        this.context = context;
        this.filepath=filepath;
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        MediaRecorder mediaRecorder= new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setOutputFile(filepath+internalfilename);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:

                if (isRinging) {
                    mediaRecorder.stop();
                    mediaRecorder.reset();
                    mediaRecorder.release();
                    isRinging=false;
                }
                Toast.makeText(context, "Idle", Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                isRinging=false;
                Toast.makeText(context, "Offhook", Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                isRinging=true;
                try {
                    mediaRecorder.prepare();
                    mediaRecorder.start();

                } catch (IOException e) {
                    e.printStackTrace();
                }

                Toast.makeText(context, "Ringing", Toast.LENGTH_SHORT).show();
                break;

        }

    }
}

异常:

代码语言:javascript
复制
E/MediaRecorder: stop called in an invalid state: 4
03-E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException
at android.media.MediaRecorder._stop(Native Method)
at android.media.MediaRecorder.stop(MediaRecorder.java:967)
at TeleListener.onCallStateChanged(TeleListener.java:43)
at android.telephony.PhoneStateListener$1.handleMessage
(PhoneStateListener.java:323)                                                                                            
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325) 
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
EN

回答 1

Stack Overflow用户

发布于 2018-03-15 10:03:59

代码语言:javascript
复制
private void stopRecording() {
if (null != recorder){
    try {
        recorder.prepare(); 

当您停止MediaRecorder.时,不应该调用准备准备方法是在启动记录器之前调用的。请参阅MediaRecorder文档中的状态图。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49296213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档