开发者社区> 问答> 正文

Android项目一点录音按钮就停止运行

package com.example.task314;

import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;

import android.media.MediaRecorder;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.SystemClock;
 import android.app.Activity;
 import android.view.Menu;
 import android.view.View;
 import android.view.Window;
 import android.widget.Button;
 import android.widget.Chronometer;
 import android.widget.Toast;
 /**
在Android上编写一个程序,能够启动本机的录音功能、拍照功能、摄像功能。不考虑权限问题
@author Administrator

*/
 public class Sound extends Activity {

private Button bt1 = null;
 private Button bt2 = null;
 private Chronometer ch1 =null;
 private MediaRecorder mr = null;
 private String PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/media";

private int i=0;

@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.activity_sound);
bt1 = (Button)this.findViewById(R.id.button1);
bt2 = (Button)this.findViewById(R.id.button2);
ch1 = (Chronometer)findViewById(R.id.chronometer1);

//创建一个临时的音频输出文件


// audioFile = File.createTempFile("record_", ".amr");
 //第4步:指定音频输出文件
 // mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
 File file = new File(PATH);

 if (!file.exists()) {

 //按照指定的路径创建文件夹

 file.mkdirs();

 }
bt1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub              
        mr = new MediaRecorder();
        // 第1步:设置音频来源(MIC表示麦克风)
        mr.setAudioSource(MediaRecorder.AudioSource.MIC);
        //第2步:设置音频输出格式(默认的输出格式)
        mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        //第3步:设置音频编码方式(默认的编码方式)
        mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

        SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMdd_hhmmss");
        String date = sDateFormat.format(new java.util.Date());

        System.out.println("time---"+date);

        String mFileName = PATH + "/"+date+".amr";
        mr.setOutputFile(mFileName);



// System.out.println(""+audioFile.getAbsolutePath().toString());
 //第5步:调用prepare方法
 try {
 mr.prepare();
 } catch (IllegalStateException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
            //第6步:调用start方法开始录音
            mr.start();

            //启动计时器
//          ch1.setBase(SystemClock.elapsedRealtime());  
            ch1.start();

            Toast.makeText(getApplicationContext(), "开启", 0).show();
            bt1.setEnabled(false);
        }
    });
    bt2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            //第7步:停止录音
            if(mr != null )
            {
                mr.stop();
                ch1.stop();
                ch1.setBase(SystemClock.elapsedRealtime());
                Toast.makeText(getApplicationContext(), "关闭", 0).show();
                bt1.setEnabled(true);
            }                  
        }
    });
}


}

展开
收起
爵霸 2016-06-01 15:12:46 2456 0
1 条回答
写回答
取消 提交回答
  • 一般来说对于文件的操作都是要进行异常处理的,你这个很明显是没有进行try catch 嘛,还有就是代码书写一定要规范,否则没有人想看你的代码到底有哪些错误的,一样对你有用

    2019-07-17 19:23:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载