需要一个通话记录器有一些代码但它不会在呼叫开始或结束时开始我没有添加任何与此相关的东西

问题描述

我需要一个通话记录器。我有一些代码。但它不会在呼叫开始或结束时开始。我没有添加任何与此相关的内容。有时它已损坏。我从各种来源构建了这段代码。请添加详细信息,以便在通话开始时开始并在通话结束时结束。那么为什么它有时会损坏?我也使用 mp4 格式。我想使用 mp3 格式。我应该做哪些改变?
我的代码

public class MainActivity extends AppCompatActivity {
    MediaRecorder recorder = null;
    private static final String AUdio_RECORDER_FILE_EXT_3GP = ".3gp";
    private static final String AUdio_RECORDER_FILE_EXT_MP4 = ".mp4";
    private static final String AUdio_RECORDER_FOLDER = "AudioRecorder";
    private int currentFormat = 0;
    private int output_formats[] = { MediaRecorder.OutputFormat.MPEG_4,MediaRecorder.OutputFormat.THREE_GPP };
    private String file_exts[] = { AUdio_RECORDER_FILE_EXT_MP4,AUdio_RECORDER_FILE_EXT_3GP };
    String RECORD_DIRECTORY = "Call Records";
    static final int REQUEST = 112;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        if (Build.VERSION.SDK_INT >= 23) {
            String[] PERMISSIONS = {android.Manifest.permission.CALL_PHONE,android.Manifest.permission.READ_PHONE_STATE,android.Manifest.permission.READ_EXTERNAL_STORAGE,android.Manifest.permission.RECORD_AUdio,android.Manifest.permission.MODIFY_AUdio_SETTINGS,android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.PROCESS_OUTGOING_CALLS};
            if (!hasPermissions(this,PERMISSIONS)) {
                ActivityCompat.requestPermissions((Activity) this,PERMISSIONS,REQUEST );

                startMediaRecorder();

            } else {
                //do here

                startMediaRecorder();

            }
        } else {
            //do here

            startMediaRecorder();

        }

    }
    private boolean startMediaRecorder(){
        recorder = new MediaRecorder();
        try{
            recorder.reset();
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setAudioSamplingRate(8000);
            recorder.setAudioEncodingBitRate(12200);
            recorder.setoutputFormat(output_formats[currentFormat]);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setoutputFile(getFilename());

            MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() {
                public void onError(MediaRecorder arg0,int arg1,int arg2) {
                    //Log.e(TAG,"OnErrorListener " + arg1 + "," + arg2);
                    terminateAndEraseFile();
                }
            };
            recorder.setonErrorListener(errorListener);

            MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
                public void onInfo(MediaRecorder arg0,"OnInfoListener " + arg1 + "," + arg2);
                    terminateAndEraseFile();
                }
            };
            recorder.setonInfoListener(infoListener);


            recorder.prepare();
            // Sometimes prepare takes some time to complete
            Thread.sleep(2000);
            recorder.start();
            //isRecordStarted = true;
            return true;
        }catch (Exception e){
            e.getMessage();
            terminateAndEraseFile();
            return false;
        }
    }
    private String getFilename() {
        File MediaDirectory = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),RECORD_DIRECTORY );
        // have the object build the directory structure,if needed.

        if (!MediaDirectory.exists()) {
            Log.d("dirrrrrr","" + MediaDirectory.mkdirs());
            MediaDirectory.mkdirs();
        }

        return (MediaDirectory + "/" + System.currentTimeMillis() + file_exts[currentFormat]);
    }
    private void terminateAndEraseFile(){
        try{
            if (null != recorder) {
                recorder.stop();
                recorder.reset();
                recorder.release();

                recorder = null;
            }
        }catch(RuntimeException stopException){

        }
    }
    private static boolean hasPermissions(Context context,String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context,permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }
    @Override
    public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode,permissions,grantResults);
        switch (requestCode) {
            case REQUEST: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //do here
                    Toast.makeText(mContext,"The app was  allowed to read your store.",Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(mContext,"The app was not allowed to read your store.",Toast.LENGTH_LONG).show();
                }
            }
        }
    }
}

Manifest.xml:      


<uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUdio" />
    <uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)