Android imitation wechat voice recording function

This example shares the specific code of Android imitation wechat recording voice for your reference. The specific contents are as follows

preface

I divided the recording into two parts

1. UI interface, pop-up window to read seconds 2. A class (including start, stop and create file name functions)

Part I

Due to the 6.0 permission problem, click the button to apply for permission, and a window will pop up. How to apply for permission

Pop up window layout 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>

Bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce bounce

 /**
   * 开始录音
   */
  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);

  }

Part II tools

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";
    }
}

This is selected from my code. It should be possible to add permissions.

The above is the whole content of this article. I hope it will help you in your study, and I hope you will support us a lot.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>