zoukankan      html  css  js  c++  java
  • Android 简单的录音机

    今天在做一个简单的录音机的时候,录音机老是无法正常实例化,不能使用,后来查找问题,一个一个的试,最后确定了,原来是两个设置写反了,却造成了,无法正常工作,真是郁闷啊。找了一个教程看了一下,教程中也没有提,这两个不能写反,就当给自己一个警告吧,也希望看到的人,不知道这个问题的人能记住。下面把代码放到下面:

    package com.RecordTest;
    import java.io.File;
    import java.io.FilenameFilter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.ListActivity;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class RecordTest extends ListActivity {
    
    	Button btn1, btn2;
    
    	int currertindex = 0;
    
    	private MediaRecorder mediarecorder; // 创建录音机
    
    	File recordFile = null;
    	File sdcardPath = null;// 录音文件目录
    
    	String Tempfile = "Record_temp_";
    	List<String> fileList = new ArrayList<String>();
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
    			sdcardPath = Environment.getExternalStorageDirectory();
    			setTitle(sdcardPath.getName());
    		} else {
    			Toast.makeText(RecordTest.this, "没有SD卡", 1000).show();
    		}
    		getRecordList();
    
    		btn1 = (Button) findViewById(R.id.btn1);
    
    		btn2 = (Button) findViewById(R.id.btn2);
    
    		btn1.setOnClickListener(new View.OnClickListener() {
    
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				try {
    
    					recordFile = File.createTempFile(Tempfile, ".amr",
    							sdcardPath);
    					Log.i("aaaaa", "1");
    					mediarecorder = new MediaRecorder();
    					Log.i("aaaaa", "2");
    					mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置麦克风
    					Log.i("aaaaa", "3");
    					mediarecorder
    							.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);	//设置输出文件格式
    					Log.i("aaaaa", "4");
    					mediarecorder
    							.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 设置编码格式
    
    					
    					Log.i("aaaaa", "5");
    					mediarecorder.setOutputFile(recordFile.getAbsolutePath()); // 使用绝对路径进行保存文件
    					Log.i("aaaaa", "6");
    					 mediarecorder.prepare();
    					mediarecorder.start();
    					Toast.makeText(RecordTest.this, "开始", Toast.LENGTH_LONG).show();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    
    			}
    		});
    
    		btn2.setOnClickListener(new View.OnClickListener() {
    
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				try {
    					
    					if (recordFile != null) {
    						mediarecorder.stop();
    						fileList.add(recordFile.getName());
    						
    						 ArrayAdapter<String> list = new
    						 ArrayAdapter<String>(RecordTest.this,
    						 R.layout.itemlist, R.id.listitem, fileList);
    
    						 setListAdapter(list);
    						 mediarecorder = null;
    						 Toast.makeText(RecordTest.this, "停止", Toast.LENGTH_LONG).show();
    					}
    				} catch (Exception e) {
    					Log.i("eeeee", e.getMessage());
    				}
    			}
    		});
    	}
    
    	void getRecordList() {
    		// 首先检测是否存在SDCard
    		try {
    			File home = sdcardPath;
    			fileList.clear();
    			if (home.list(new Fileter()).length > 0) {
    				for (File file : home.listFiles(new Fileter())) {
    					fileList.add(file.getName());
    				}
    
    				ArrayAdapter<String> list = new ArrayAdapter<String>(this,
    						R.layout.itemlist, R.id.listitem, fileList);
    
    				setListAdapter(list);
    
    			}
    		} catch (Exception e) {
    			Toast.makeText(RecordTest.this, e.getMessage(), 1000).show();
    		}
    
    	}
    
    	class Fileter implements FilenameFilter {
    
    		public boolean accept(File dir, String filename) {
    			// TODO Auto-generated method stub
    			return filename.equals(".amr");
    		}
    
    	}
    }

    在使用过程中,需要加入操作SD卡和使用录音设备的权限,即在AndroidManifest.xml中加入: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
    然后就可以使用了,如果有问题,欢迎大家指正!

  • 相关阅读:
    遍历一个枚举类型
    ASP.NET:C#中时间格式的转换
    DataAdapter去批量更新数据的FAQ
    .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (第2版) (C# DIY HttpWebClient) 收藏
    如何使数据库中取出的数据保持原有格式
    如何获取控制台应用程序自己的文件名
    2008将倒掉一大部分的工厂和贸易公司
    组六对半分组组合投资方案(36789)
    重又归孑然一身
    善于总结
  • 原文地址:https://www.cnblogs.com/fly_binbin/p/1903930.html
Copyright © 2011-2022 走看看