java.lang.RuntimeException: 在 android.media.MediaRecorder.start(Native Method) 启动失败 [英] java.lang.RuntimeException: start failed at android.media.MediaRecorder.start(Native Method)

查看:59
本文介绍了java.lang.RuntimeException: 在 android.media.MediaRecorder.start(Native Method) 启动失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在记录电话.当我开始录制电话时,不幸的是停止了.&它给出了错误 MediaRecorder 启动失败 -2147483648.我请告诉我我的代码有什么问题?这是我的代码.

I am working on records a phone calls. When i start a record a phone call then it's unfortunately stop. & it's gives error MediaRecorder start fail -2147483648. I Please tell me what is the problem in my code? Here is my Code.

public class incomingcall extends BroadcastReceiver {
Context c;
MediaRecorder recorder;
public incomingcall() {
}
@Override
public void onReceive(Context context, Intent intent) {
    c = context;
    try {
        PhoneStateChangeListener pscl = new PhoneStateChangeListener();
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        tm.listen(pscl, PhoneStateListener.LISTEN_CALL_STATE);
    } catch (Exception e) {
        Log.e("", "", e);
    }
}

private class PhoneStateChangeListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                Toast.makeText(c, "ring", Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                startRecording();
                Toast.makeText(c, "offhook", Toast.LENGTH_SHORT).show();
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                stopRecording();
                Toast.makeText(c, "idle", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
private void startRecording() {
    try {
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        String file=c.getFilesDir().getAbsolutePath();
        file+="/sound.3gp";
        recorder.setOutputFile(file);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.prepare();
        recorder.start();
    } catch (IOException e) {
        Log.e("", "prepare() failed", e);
    }
}
private void stopRecording() {
    try {
        recorder.stop();
        recorder.release();
        recorder = null;
    } catch (Exception e) {
        Log.e("", "", e);
    }
 }
}

日志

    07-20 15:33:47.867 18525-18525/in.pounkumar.callblocker E/MediaRecorder: start failed: -2147483648
07-20 15:33:47.868 18525-18525/in.pounkumar.callblocker E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: in.pounkumar.callblocker, PID: 18525
                                                                          java.lang.RuntimeException: start failed.
                                                                              at android.media.MediaRecorder.start(Native Method)
                                                                              at in.pounkumar.callblocker.incomingcall.startRecording(incomingcall.java:73)
                                                                              at in.pounkumar.callblocker.incomingcall.access$100(incomingcall.java:20)
                                                                              at in.pounkumar.callblocker.incomingcall$PhoneStateChangeListener.onCallStateChanged(incomingcall.java:53)
                                                                              at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:295)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

推荐答案

我遇到了同样的问题,我通过对三星和 LG 设备使用不同的初始化来解决它.

I have the same problem and i solved it by using different initializations for Samsung and LG devices.

        String manufacturer = Build.MANUFACTURER;
    if (manufacturer.toLowerCase().contains("samsung")) {
        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
    } else {
        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
    }

希望对你有帮助.

这篇关于java.lang.RuntimeException: 在 android.media.MediaRecorder.start(Native Method) 启动失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆