我的应用程序需要实现音频捕获功能。
我遵循了一些教程和Google指南。所以我做了下面的代码。
它可以正常工作,直到第二次尝试。当我一次捕捉声音时,它就能回复我所说的话。
在第二次尝试中,当我认为必须重写创建的文件时,应用程序崩溃。可能我忽略了一些方法。
你可以帮帮我吗 ?

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

            inizializzaView();
            Media();
            SetListner();
        }
public void inizializzaView(){

        Text=(TextView)findViewById(R.id.textview);
        Registra=(Button)findViewById(R.id.bottonereg);
        Ascolta=(Button)findViewById(R.id.bottoneascolta);
        Stop=(Button)findViewById(R.id.bottonestop);

        Stop.setEnabled(false);
        Ascolta.setEnabled(true);








    }

    public void SetListner(){

        Registra.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                    start(v);


                }
        });

        Stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                stop(v);


            }
        });
        Ascolta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                play(v);


            }
        });


    }
    public void Media(){


        outputFile = Environment.getExternalStorageDirectory().
                getAbsolutePath() + "/recording.3gp";;

// android voice recorder

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


    public void start(View view){
        try {
            media.prepare();
            media.start();
        } catch (IOException e) {
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        Registra.setEnabled(false);
        Stop.setEnabled(true);
        Toast.makeText(getApplicationContext(), "Stai registrando Burlone !!!", Toast.LENGTH_LONG).show();

    }
    public void stop(View view){
        media.stop();
        media.release();
        media = null;
        Stop.setEnabled(false);
        Registra.setEnabled(true);
        Toast.makeText(getApplicationContext(), "Registrazione Terminata",
                Toast.LENGTH_LONG).show();
    }

    public void play(View view) {

        try{

            myPlayer = new MediaPlayer();

            myPlayer.setDataSource(outputFile);

            myPlayer.prepare();

            myPlayer.start();
            myPlayer.release();



            Ascolta.setEnabled(true);

            Stop.setEnabled(false);





            Toast.makeText(getApplicationContext(), "Ascolta.......",

                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

最佳答案

我解决了!
该代码需要实现。

public void start(View view){
        try {
Media();// this creates a new object whenever you capture new voice.
            media.prepare();
            media.start();
        } catch (IOException e) {
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        Registra.setEnabled(false);
        Stop.setEnabled(true);
        Toast.makeText(getApplicationContext(), "Stai registrando Burlone !!!", Toast.LENGTH_LONG).show();

    }
    public void stop(View view){
        media.stop();
        media.release();
        media = null;
        Stop.setEnabled(false);
        Registra.setEnabled(true);
        Toast.makeText(getApplicationContext(), "Registrazione Terminata",
                Toast.LENGTH_LONG).show();
    }

08-18 06:43