91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Android仿微信錄制語音功能

發布時間:2021-09-27 11:45:18 來源:億速云 閱讀:114 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關如何使用Android仿微信錄制語音功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

具體內容如下

前言

我把錄音分成了兩部分

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

這是從我代碼中擇出來的,加上權限應該是可以的。

關于“如何使用Android仿微信錄制語音功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台江县| 电白县| 岳池县| 吴忠市| 大城县| 平顺县| 美姑县| 苍南县| 浦北县| 闻喜县| 建始县| 祥云县| 烟台市| 聂拉木县| 大连市| 庄浪县| 滦平县| 邹平县| 什邡市| 平塘县| 瓮安县| 九寨沟县| 泸水县| 尼玛县| 孝昌县| 松阳县| 五莲县| 苍南县| 彰武县| 永昌县| 金沙县| 镇平县| 普洱| 长沙市| 淮南市| 红桥区| 蒲江县| 望奎县| 墨竹工卡县| 甘洛县| 页游|