前言
我把录音分成了两部分
1.UI界面,弹窗读秒
2.一个类(包含开始、停止、创建文件名功能)

第一部分

由于6.0权限问题,点击按钮申请权限通过则弹窗,如何申请权限

弹窗布局popw_record.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="260dp"        android:layout_marginLeft="50dp"        android:layout_marginRight="50dp"        android:background="@drawable/take_phone"        android:orientation="vertical">        <ImageView            android:id="@+id/close"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:padding="10dp"            android:src="@mipmap/guanbi" />        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_marginLeft="50dp"            android:layout_marginRight="50dp"            android:gravity="center"            android:orientation="vertical">            <ImageView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:src="@mipmap/luyin" />            <Chronometer                android:id="@+id/timer"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="20dp"                android:format="%s" />            <TextView                android:id="@+id/startRecord"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="@string/playrecord"                android:layout_marginTop="20dp"                android:background="@color/background"                android:padding="10dp"                />        LinearLayout>    RelativeLayout>LinearLayout>

弹弹弹

 /**     * 开始录音     */    private void showPopup() {        final View contentView = LayoutInflater.from(Orderdeatil.this).inflate(R.layout.popw_record, null);        mPopWindow = new PopupWindow(contentView, ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT, true);        mPopWindow.setContentView(contentView);        TextView startRe = (TextView) contentView.findViewById(R.id.startRecord);        startRe.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                switch (event.getAction()) {                    case MotionEvent.ACTION_UP://松开事件发生后执行代码的区域                        if (mPopWindow != null) {                            mPopWindow.dismiss();                            sr.stopRecording();                        }                        break;                    case MotionEvent.ACTION_DOWN://按住事件发生后执行代码的区域                        Chronometer timer = (Chronometer) contentView.findViewById(R.id.timer);                        timer.setBase(SystemClock.elapsedRealtime());//计时器清零                        timer.start();//开始录音的提示                        sr.startRecording();                        break;                    case MotionEvent.ACTION_CANCEL:                        if (mPopWindow != null) {                            mPopWindow.dismiss();                            sr.stopRecording();//停止录音                        }                        break;                    default:                        break;                }                return true;            }        });        ImageView close = (ImageView) contentView.findViewById(R.id.close);        close.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mPopWindow.dismiss();            }        });        mPopWindow.setTouchable(true);        mPopWindow.setFocusable(true);        mPopWindow.setBackgroundDrawable(new BitmapDrawable());        mPopWindow.setOutsideTouchable(true);        mPopWindow.setTouchInterceptor(new View.OnTouchListener() {            public boolean onTouch(View v, MotionEvent event) {                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {                    mPopWindow.dismiss();                    return true;                }                return false;            }        });        View rootview = LayoutInflater.from(Orderdeatil.this).inflate(R.layout.activity_orderdeatil, null);        mPopWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0);    }

第二部分 工具类

class SoundRecorder {        public void startRecording() {            mRecorder = new MediaRecorder();            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);            mRecorder.setOutputFile(newFileName());            try {                // 准备好开始录音                mRecorder.prepare();                mRecorder.start();            } catch (IllegalStateException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        public void stopRecording() {            if (mRecorder != null) {                //added by ouyang start                try {                    //下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop();                    //报错为:RuntimeException:stop failed                    mRecorder.setOnErrorListener(null);                    mRecorder.setOnInfoListener(null);                    mRecorder.setPreviewDisplay(null);                    mRecorder.stop();                } catch (IllegalStateException e) {                    // TODO: handle exception                    Log.i("Exception", Log.getStackTraceString(e));                } catch (RuntimeException e) {                    // TODO: handle exception                    Log.i("Exception", Log.getStackTraceString(e));                } catch (Exception e) {                    // TODO: handle exception                    Log.i("Exception", Log.getStackTraceString(e));                }                //added by ouyang end                mRecorder.release();                mRecorder = null;                upRecord();            }        }        public String newFileName() {            mFileName = Environment.getExternalStorageDirectory()                    .getAbsolutePath();            String s = new SimpleDateFormat("yyyy-MM-dd hhmmss")                    .format(new Date());            return mFileName += "/rcd_" + s + ".mp3";        }    }

这是从我代码中择出来的,加上权限应该是可以的。

更多相关文章

  1. android tabhost 图标
  2. Android(安卓)反编译Apk得到Java源代码
  3. Android通过json向MySQL中读写数据的方法详解【读取篇】
  4. Android代码混淆之ProGuard
  5. android 获得屏幕、视图、任务栏、状态栏的高宽以及屏幕的设置
  6. [置顶] Android(安卓)LockScreen
  7. -Android数据库SQLiteDatabase的使用
  8. Android(安卓)Studio 自带模拟器获取root权限
  9. RxJava教程(四)在Android中使用RxJava

随机推荐

  1. Android——ProgressDialog
  2. android跳转到微信app
  3. 一句话解决RecyclerView滚动问题
  4. Android(安卓)自定义Toast
  5. Android 下载 断点续传
  6. Programmatically Injecting Events on A
  7. android 修改编译内核源码配置选项不执行
  8. Android按键事件映射表和转义符对照
  9. Android 编程 技巧
  10. Android handler异步更新