Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android强制关闭应该已经设置了字幕控制器_Java_Android - Fatal编程技术网

Java Android强制关闭应该已经设置了字幕控制器

Java Android强制关闭应该已经设置了字幕控制器,java,android,Java,Android,我正在android studio中创建录制应用程序。我试着记录和播放结果,没有问题。但是当我第二次尝试录制时,应用程序强制关闭,LogCat只给我“E/MediaPlayer:应该已经设置了字幕控制器” 代码如下: MainActivity.java package com.zihadrizkyef.belajaraudiocapture; import android.media.MediaPlayer; import android.media.MediaRecorder; import

我正在android studio中创建录制应用程序。我试着记录和播放结果,没有问题。但是当我第二次尝试录制时,应用程序强制关闭,LogCat只给我“E/MediaPlayer:应该已经设置了字幕控制器”

代码如下:

MainActivity.java

package com.zihadrizkyef.belajaraudiocapture;

import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    Button btnPlay, btnStop, btnStart;
    MediaRecorder myAudioRecorder;
    String outputFile = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnPlay = (Button) findViewById(R.id.btnRecordPlay);
        btnStart = (Button) findViewById(R.id.btnRecordStart);
        btnStop = (Button) findViewById(R.id.btnRecordStop);

        btnPlay.setEnabled(false);
        btnStop.setEnabled(false);
        outputFile = Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gpp";

        myAudioRecorder = new MediaRecorder();
        myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        myAudioRecorder.setOutputFile(outputFile);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    myAudioRecorder.prepare();
                    myAudioRecorder.start();
                } catch (IOException | IllegalStateException e) {
                    e.printStackTrace();
                }

                btnStart.setEnabled(false);
                btnStop.setEnabled(true);

                Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_SHORT).show();
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myAudioRecorder.stop();
                myAudioRecorder.release();
                /*myAudioRecorder = null;*/

                btnPlay.setEnabled(true);
                btnStart.setEnabled(true);
                btnStop.setEnabled(false);

                Toast.makeText(MainActivity.this, "Audio recorded successfully", Toast.LENGTH_SHORT).show();
            }
        });

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MediaPlayer mediaPlayer = new MediaPlayer();

                try {
                    mediaPlayer.setDataSource(outputFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                mediaPlayer.start();
                Toast.makeText(MainActivity.this, "Playing audio", Toast.LENGTH_SHORT).show();
            }
        });
    }
}
请尝试以下代码:

    package com.zihadrizkyef.belajaraudiocapture;

    import android.media.MediaPlayer;
    import android.media.MediaRecorder;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

    import java.io.IOException;

    public class MainActivity extends AppCompatActivity {
        Button btnPlay, btnStop, btnStart;
        MediaRecorder myAudioRecorder;
        String outputFile = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            btnPlay = (Button) findViewById(R.id.btnRecordPlay);
            btnStart = (Button) findViewById(R.id.btnRecordStart);
            btnStop = (Button) findViewById(R.id.btnRecordStop);

            btnPlay.setEnabled(false);
            btnStop.setEnabled(false);


            btnStart.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gpp";
    //Creating MediaRecorder and specifying audio source, output format, encoder & output format  
            myAudioRecorder = new MediaRecorder();


            myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            myAudioRecorder.setOutputFile(outputFile);
                        myAudioRecorder.prepare();
                        myAudioRecorder.start();
                    } catch (IOException | IllegalStateException e) {
                        e.printStackTrace();
                    }

                    btnStart.setEnabled(false);
                    btnStop.setEnabled(true);

                    Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_SHORT).show();
                }
            });

            btnStop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myAudioRecorder.stop();
                    myAudioRecorder.release();
                    /*myAudioRecorder = null;*/

                    btnPlay.setEnabled(true);
                    btnStart.setEnabled(true);
                    btnStop.setEnabled(false);

                    Toast.makeText(MainActivity.this, "Audio recorded successfully", Toast.LENGTH_SHORT).show();
                }
            });

            btnPlay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MediaPlayer mediaPlayer = new MediaPlayer();

                    try {
                        mediaPlayer.setDataSource(outputFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    try {
                        mediaPlayer.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    mediaPlayer.start();
                    Toast.makeText(MainActivity.this, "Playing audio", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
在这里,我所做的是创建MediaRecorder并指定音频源、输出格式。。。对于每个开始按钮,请单击所有这些内容请尝试以下代码:

    package com.zihadrizkyef.belajaraudiocapture;

    import android.media.MediaPlayer;
    import android.media.MediaRecorder;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;

    import java.io.IOException;

    public class MainActivity extends AppCompatActivity {
        Button btnPlay, btnStop, btnStart;
        MediaRecorder myAudioRecorder;
        String outputFile = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            btnPlay = (Button) findViewById(R.id.btnRecordPlay);
            btnStart = (Button) findViewById(R.id.btnRecordStart);
            btnStop = (Button) findViewById(R.id.btnRecordStop);

            btnPlay.setEnabled(false);
            btnStop.setEnabled(false);


            btnStart.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    try {
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gpp";
    //Creating MediaRecorder and specifying audio source, output format, encoder & output format  
            myAudioRecorder = new MediaRecorder();


            myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            myAudioRecorder.setOutputFile(outputFile);
                        myAudioRecorder.prepare();
                        myAudioRecorder.start();
                    } catch (IOException | IllegalStateException e) {
                        e.printStackTrace();
                    }

                    btnStart.setEnabled(false);
                    btnStop.setEnabled(true);

                    Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_SHORT).show();
                }
            });

            btnStop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myAudioRecorder.stop();
                    myAudioRecorder.release();
                    /*myAudioRecorder = null;*/

                    btnPlay.setEnabled(true);
                    btnStart.setEnabled(true);
                    btnStop.setEnabled(false);

                    Toast.makeText(MainActivity.this, "Audio recorded successfully", Toast.LENGTH_SHORT).show();
                }
            });

            btnPlay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MediaPlayer mediaPlayer = new MediaPlayer();

                    try {
                        mediaPlayer.setDataSource(outputFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    try {
                        mediaPlayer.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    mediaPlayer.start();
                    Toast.makeText(MainActivity.this, "Playing audio", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

在这里,我所做的是创建MediaRecorder并指定音频源、输出格式。。。所有这些东西对于每个开始按钮点击

可能重复的可能重复的感谢,它工作。但是你能告诉我我犯了什么错误吗?问题是创建MediaRecorder和指定音频源、输出格式。。。您需要为每个会话的MediaRecorder创建新对象。如果我使用相同的音频源、输出格式等创建新的MediaRecorder。旧的MediaRecorder是否已删除?是的,旧的MediaRecorder已替换为新的OneHanks,它可以工作。但是你能告诉我我犯了什么错误吗?问题是创建MediaRecorder和指定音频源、输出格式。。。您需要为每个会话的MediaRecorder创建新对象。如果使用相同的音频源、输出格式等创建新的MediaRecorder,是否删除旧的MediaRecorder?是的,旧的MediaRecorder将替换为新的MediaRecorder